Solr StandardTokenizerFactory tokinize на фильтре точек

Я не хочу искать определенные числа в своем индексе, но у меня возникают проблемы с некоторыми результатами. (Я использую эдисмакс.)

Пример:

    Term in index  I want to search: b1.123.456
    Query I use is b1 123 456 (no spaces)

Это не работает, потому что . не то же самое, что - (я прочитал документацию). Я искал решение и обнаружил, что мне нужно использовать фильтр в моем поле:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <charFilter  class="solr.MappingCharFilterFactory" mapping="mapchar.txt" />
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <charFilter  class="solr.MappingCharFilterFactory" mapping="mapchar.txt" />
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

Это мой тип поля, mapchar содержит "."=>" "

Теперь, когда я пытаюсь найти:

    b1.123.456   returns all results for each token (normal behaviour)
    "b1.123.456" returns what I'm looking for.
    "b1 123 456" returns what I'm looking for.
     b1 123 456  **returns nothing**

Почему обычный запрос edismax без поиска по фразе возвращает 0 результатов?

Редактировать:

Я нашел ошибку в журналах, когда я использую последний запрос:

<record>
  <date>2012</date>
  <millis></millis>
  <sequence></sequence>
  <logger>org.apache.solr.servlet.SolrDispatchFilter</logger>
  <level>SEVERE</level>
  <class>org.apache.solr.common.SolrException</class>
  <method>log</method>
  <thread>12</thread>
  <message>null:java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at org.apache.solr.util.SolrPluginUtils.calculateMinShouldMatch(SolrPluginUtils.java:563)
    at org.apache.solr.util.SolrPluginUtils.setMinShouldMatch(SolrPluginUtils.java:518)
    at org.apache.solr.search.ExtendedDismaxQParser.parse(ExtendedDismaxQParserPlugin.java:264)
    at org.apache.solr.search.QParser.getQuery(QParser.java:143)
    at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:118)
    at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:185)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129)
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1699)
    at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:455)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:276)
    at ...
</message>
</record>

person DavidVdd    schedule 27.12.2012    source источник


Ответы (1)


Поскольку обработчик запросов по умолчанию работал (/ select), я начал думать, что что-то не так с моим обработчиком запросов.

Чтобы выяснить, что не так, я начал немного отключать части моего собственного обработчика запросов.

  <!--<str name="mm"></str>-->

Пустой мм может привести к ошибкам!

Раньше у меня был параметр мм, но он мне больше не был нужен, поэтому я оставил его пустым...

person DavidVdd    schedule 27.12.2012