2012-12-27 37 views
0

我不想在索引中搜索某些数字,但我遇到了某些结果的麻烦。 (我使用edismax。)Solr StandardTokenizerFactory tokinize on dots过滤器

例子:

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** 

为什么不词组搜索返回结果为0正常edismax查询?

编辑:

我发现一个错误在日志中,当我使用的最后一个查询:

<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> 

回答

0

由于默认查询处理工作(/选择),我一开始以为是什么我的查询处理程序错误。

为了找出什么是错误的,我开始禁用我自己的请求处理程序的一些部分。

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

空毫米可以给你错误

我曾经有一个毫米参数,但我真的不再需要它了,所以我把它留空...