Применить QueryParser с логическими операторами к основным моментам в Python
Этот вопрос о пакете Whoosh в python.
Свист: ссылка
Ссылка на разбор пользовательских запросов Whoosh: ссылка
На данный момент у меня есть следующая проблема:
Whoosh искатель отлично подходит для поиска в документах. Но у меня проблема с функцией подсветки. В приведенном ниже скрипте я ищу "anim id" ИЛИ coeptate, что означает найти строку "anim id" или строку "coluptate".
Однако, когда я применяю функцию подсветки к документу, она также выделяет одно слово "аним". Что я не хочу. Мне нужны только основные моменты, которые следуют правилам QueryParser. (' "anim id" ИЛИ ВУЛПАТЭ ")
Кто-нибудь знает как это сделать?
from whoosh.index import create_in
from whoosh.qparser import QueryParser
from whoosh.fields import *
schema = Schema(title=TEXT(stored=True), path=ID(stored=True), content=TEXT(stored=True))
ix = create_in("index", schema)
writer = ix.writer()
writer.add_document(title=u"First document", path=u"/a",
content=u"TLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et anim dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")
writer.commit()
with ix.searcher() as searcher:
query = QueryParser("content", ix.schema).parse('"anim id" OR voluptate')
results = searcher.search(query)
for hit in results:
highlights = hit.highlights("content").split("...")
for highlight in highlights:
print highlight
Это выводит:
ut labore et <b class="match term0">anim</b> dolore magna aliqua
in reprehenderit in <b class="match term1">voluptate</b> velit esse cillum
deserunt mollit <b class="match term0">anim</b> <b class="match term2">id</b> est laborum
Но мне нужен вывод:
in reprehenderit in <b class="match term1">voluptate</b> velit esse cillum
deserunt mollit <b class="match term0">anim</b> <b class="match term2">id</b> est laborum
Запрос также, чтобы иметь возможность работать с логическими операторами: ИЛИ, И, НЕ