Как Solr Search работает с + телефон - PullRequest
1 голос
/ 21 мая 2019

actualString: 32498516141, + 32498516141

convertedString = ParamNames.OPEN_PARENTHISIS + actualString + ParamNames.CLOSE_PARENTHISIS;

содержит поиск, не работающий в solr, когда мы ищем с + 32498516, + 3249, 32498516,324 и т. Д.

1 Ответ

0 голосов
/ 21 мая 2019

Если вы хотите искать по частям слова, вам необходимо применить, например, N-Gram Tokenizer, <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>

например.

In: "bicycle"

Out: "bicy", "bicyc", "icyc", "icycl", "cycl", "cycle", "ycle"

В этом случае вы сможете осуществлять поиск по части слова.Вам необходимо применить NGramTokenizerFactory для обоих анализаторов:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="false">
    <analyzer type="index">
      <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
  </fieldType>

Вы также можете попробовать следующий анализатор запросов.Все зависит от ваших требований.

<analyzer type="query">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>

Вы можете изменить или добавить типы полей в schema.xml и применить их к своему полю.После этого перезапустите сервер, переиндексируйте данные.Вы можете проверить вышеуказанный fieldType для своего поля, если данные совпадают с помощью инструмента администрирования solr.

Я использовал приведенный ниже тип поля и провел анализ с помощью инструмента solr.

Вот полевведите:

    <fieldType name="custome_field_type" class="solr.TextField" positionIncrementGap="100" multiValued="false">
        <analyzer type="index">
          <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="10"/>
          <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
          <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
          <tokenizer class="solr.KeywordTokenizerFactory"/>
        </analyzer>
   </fieldType>

Пожалуйста, найдите изображения, на которых показано, как создаются токены при индексации и запросе данных.Также выделяются совпадения.

Analysis image one with +32 query value

Analysis image one with 9851 query value

...