Как включить апостроф (') в запрос Whoosh? - PullRequest
0 голосов
/ 08 января 2019

Как включить апостроф (') в запрос Whoosh? Например ( это ):

tws_fileName.tws_query_index( 'that's' )

, так как вышеупомянутый запрос не работает, а также

tws_fileName.tws_query_index( "that's" )

1 Ответ

0 голосов
/ 05 февраля 2019

Вы не можете сделать это по умолчанию, потому что вся пунктуация удаляется из индекса с помощью RegexTokenizer в StandardAnalyzer. "that's all, folks!" индексируется как [that,s,all,folks]

Вы можете обойти это либо:

  1. Использование поля KEYWORD вместо TEXT, поскольку оно не использует RegexTokenizer, но вы не сможете выполнять поиск по фразе в поле ключевого слова.

  2. Использование поля TEXT с StandardAnalyzer и пользовательским регулярным выражением RegexTokenizer. В приведенном ниже примере измененное регулярное выражение принимает апострофы в качестве допустимых частей токена.

    from whoosh import fields, analysis

    myanalyzer = analysis.StandardAnalyzer(expression=r'[\w\']+(\.?\w+)*')
    schema = fields.Schema(myfield=fields.TEXT(analyzer=myanalyzer))

Любые апострофы в myfield теперь будут сохраняться с токеном: [that's, all, folks]. Если вы отправите запрос как "that's" или 'that\'s', вы получите совпадение. Однако поиск по "that" больше не найдет этот документ, поскольку такого токена нет.

...