SOLR - стоп-слова игнорируются во время запроса - PullRequest
0 голосов
/ 15 октября 2018

Я настроил тип поля, который использует стоп-слова как во время индекса, так и во время запроса.Однако когда я анализирую этот тип поля с помощью анализатора, я вижу, что эти стоп-слова и удаляются только со стороны индекса, но не со стороны запроса.Вот мой тип поля из файла managed_schema:

<fieldType class="solr.TextField" name="stopwords_test" stored="false">
          <analyzer type="index">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EdgeNGramFilterFactory" maxGramSize="20" minGramSize="1"/>
          </analyzer>
          <analyzer type="query">
            <tokenizer class="solr.KeywordTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
            <filter class="solr.PorterStemFilterFactory"/>
          </analyzer>
</fieldType>

1 Ответ

0 голосов
/ 15 октября 2018

Вы используете KeywordTokenizer на стороне запроса.KeywordTokenizer ничего не делает - то есть он не разделяет входную строку, вводя несколько токенов.Фильтр остановки работает с токенами, и, поскольку вся входная строка теперь составляет один большой токен , ни один из токенов не соответствует списку стоп-слов.

Учитывая the input string, это будет разбитона три токена при индексации по StandardTokenizer: the, input и string.the обычно считается стоп-словом и удаляется, и в результате вы получаете input и string в своем индексе.

Когда вы запрашиваете и вводите the input string, KeywordTokenizer ничего не делаеткроме как хранить все как один токен, поэтому StopFilter видит только the input string.Это не соответствует никаким стоп-словам (если только у вас не было всей строки в качестве стоп-слова само по себе), и ничего не удаляется.

Вам придется использовать токенизатор, который разбивает строку на отдельные токены, если этоповедение, которое вы хотите, StandardTokenizer или WhitespaceTokenizer, вероятно, хорошие варианты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...