Поиск по вероятностным полям в Xapian и Python

Вот что я собираюсь сделать:

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 И автору: john_doe"? Есть ли альтернативы для поиска текста с пробелами в целом?

1 ответ

Решение

Наиболее распространенный способ сделать это будет добавить термины Ajohn а также Adoe (вероятно, используя Xapian's 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, хотя я не верю, что здесь что-то особенно новое).

Другие вопросы по тегам