0

これが私がやろうとしていることです:

doc = xapian.Document()
doc.set_data(somedata)
..
..
doc.add_term("Ajohn doe")

文書の作成者に接頭辞「作成者」が使用可能であると仮定します。

今、この検索を実行できるようにしたい " searchterm AND author:john doe "

「doe」は作成者の一部と見なされているため、これは明らかに機能していません (QueryParser はそれを「searchterm AND author:john OR doe」に変換しています)。私はこれを行う必要があります:

doc.add-term("Ajohn_doe")

「 searchterm AND author:john_doe 」で検索しますか? 一般的にスペースを含むテキストを検索するための代替手段はありますか?

4

1 に答える 1

1

これを行う最も一般的な方法は、用語Ajohnとを追加することです (おそらく、単語の分割と用語の作成を行うAdoeXapian の を使用します)。TermGeneratorこれが完了したら、検索を実行できますauthor:"john doe"(複数の用語を検索できるプレフィックス フレーズ検索)。次のようなもの:

import xapian
db = xapian.WritableDatabase("my-db", xapian.DB_CREATE_OR_OPEN)
tg = xapian.TermGenerator()

doc = xapian.Document()
tg.set_document(doc)
tg.index_text("John Doe", 1, "A")
db.add_document(doc)

qp = xapian.QueryParser()
qp.add_prefix("author", "A")
q = qp.parse_query('author:"John Doe"')

enq = xapian.Enquire(db)
enq.set_query(q)
for match in enq.get_mset(0, 10):
    print "%8.8i: %f" % (match.docid, match.weight,)

(最近の Xapian トランクに対してテストしましたが、特に新しいものはないと思います。)

于 2012-09-04T13:57:22.460 に答える