Примените QueryParser с логическими операторами к Highlights в Python - PullRequest
0 голосов
/ 26 апреля 2018

Этот вопрос касается пакета 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

Запрос также для возможности работы с логическими операторами: ИЛИ, И, НЕ

...