Solr поиск по тексту - PullRequest
       6

Solr поиск по тексту

0 голосов
/ 21 сентября 2018

У меня проблема с поиском документа в Solr по запросу.
Документ выглядит следующим образом:

{
  "id": "890_03366_00739",
  "text": ["2509412 MARCO GLLMRC86E28L736X  03366 00739 "],
  "_version_": 1612212288969769000
}

Если я выполняю поиск по запросу text:GLLMRC86E28L736, я правильно нашел документ.
Если я пытаюсь выполнить запрос text:GLLMRC86E28L736X, я не могу найти документпочему это происходит?
В моей схеме поле text объявлено как <field name="text" type="text_general" indexed="true" required="true" stored="true"/>
Я использую Solr 7.0.0.

ОБНОВЛЕНИЕ :
На странице «Анализ» отображаются выходные данные для моего поля «текст» и запроса GLLMRC86E28L736X
query GLLMRC86E28L736X
Длязапрос GLLMRC86E28L736 query GLLMRC86E28L736

Поиск по GLLMRC86E28L736X search 1 Поиск по GLLMRC86E28L736 search 2 Тип поля "text_general" объявлен как

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
    <analyzer type="index">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.StandardFilterFactory"/>
      <filter class="solr.PorterStemFilterFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" maxGramSize="15" minGramSize="2"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
      <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.StandardFilterFactory"/>
      <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
  </fieldType>

1 Ответ

0 голосов
/ 24 сентября 2018

Ваш EdgeNgramFilter имеет настройку maxGramSize, которая обрезает конец токена - X пропускается при индексировании, но сохраняется при запросах (как и должно быть, если вы пытаетесь сопоставить префиксы).

В левой части экрана анализа вы можете видеть, что он генерирует версии GLLMRC86E28L736X, но последний символ отбрасывается - т.е. он прекращает генерировать версии перед добавлением последнего.Запрос по-прежнему GLLMRC86E28L736X, и поскольку токен не соответствует GLLMRC86E28L736X (только GLLMRC86E28L736 с момента его остановки после генерации), вы не получите никакого ответа.

Настройте maxGramSize для своего поляили выполнить поиск по полю, которое не выполняет edgengramming, если вы хотите получить только точные совпадения.

Кроме того, это не форма по умолчанию для типа поля text_general, включенного в примеры, если япомните правильно, поэтому в будущем будет полезно, если вы также включите тип поля.

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