2013-11-29 148 views
0

我遇到了一个问题,我的索引和查询完全相同,但是没有返回结果。它似乎失败了任何长于ENGTF最大长度的单词。这是我的模式。调试器中的文本匹配,但没有返回结果

<fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="lang/stopwords_en.txt" 
      enablePositionIncrements="true" 
      /> 

    <filter class="solr.LowerCaseFilterFactory"/> 
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" stemEnglishPossessive="0" preserveOriginal="1" types="wdfftypes.txt" protected="protwords.txt"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.ASCIIFoldingFilterFactory" words="mapping-FoldToASCII.txt"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="10" side="front"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.ASCIIFoldingFilterFactory" words="mapping-FoldToASCII.txt"/> 
    </analyzer> 
</fieldType> 

下面是分析仪的屏幕截图时,“满意”是投入指数,和“满意”放入查询。

enter image description here

任何想法?谢谢

回答

0

一旦明显的选择是增加nGram长度限制。你似乎意识到这一选择,可能认为这并不理想。

另一种选择是创建第二个字段以使用nGram搜索,而另一个选项则使用没有nGram的搜索。对于〔实施例,在某处你schema.xml你可能会看到:

<field name="myCoolNGramField" type="text_en_splitting" indexed="true" stored="false"/> 
<!-- make a new type, text_en_non_ngram, and use it for this new field below. --> 
<field name="myCoolField" type="text_en_non_ngram" indexed="true" stored="false"/> 
<copyField source="myCoolNGramField" dest="myCoolField" /> 
+0

没错,这是那种我不得已修复。我试图避免这种情况,因为这是一个绝对不应该有必要的解决方法。 – Tanner

+0

这不是一个真正的巨大解决方法。当您希望以两种不同方式处理输入时,使用这种常用技术。对于只需要一个简单n-gram过滤器的人来说,如果它按照您的意愿开始匹配整个令牌,他们可能会有些沮丧。 – Kevin

相关问题