如何配置SOLR以处理类似的搜索关键字:`ABCWord`、`abc word`?
我有两种标题类型的内容:ABCWord和ABCWord。当我在搜索框中输入诸如:abc word之类的关键字时,会找到名为abc word的abc word内容,但我还需要获得名为abc word的内容 我尝试过使用:solr.EdgeNGramFilterFactory和solr.WordDelimiterFilterFactory,但似乎我用错了 我的当前schema.xml文本字段配置:如何配置SOLR以处理类似的搜索关键字:`ABCWord`、`abc word`?,solr,Solr,我有两种标题类型的内容:ABCWord和ABCWord。当我在搜索框中输入诸如:abc word之类的关键字时,会找到名为abc word的abc word内容,但我还需要获得名为abc word的内容 我尝试过使用:solr.EdgeNGramFilterFactory和solr.WordDelimiterFilterFactory,但似乎我用错了 我的当前schema.xml文本字段配置: <fieldType name="text" class="solr.TextField" po
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<!-- Case insensitive stop word removal.
add enablePositionIncrements=true in both the index and query
analyzers to leave a 'gap' for more accurate phrase queries.
-->
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory"
protected="protwords.txt"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="0"
splitOnCaseChange="0"
preserveOriginal="1"/>
<filter class="solr.LengthFilterFactory" min="2" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="30" side="front"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="30" side="back"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory"
protected="protwords.txt"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
splitOnCaseChange="0"
preserveOriginal="1"/>
<filter class="solr.LengthFilterFactory" min="2" max="100" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="30" side="front"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="30" side="back"/>
</analyzer>
</fieldType>
您并没有使用错误,但可能您使用了太多的过滤器,影响了最终结果。 EdgeGram应该可以解决您的问题,因为它会在您的输入中创建大小为3到30的令牌。因此,ABCWord将变成abc、abcw、abcwo、abcwor和ABCWord,然后对abc的搜索应该匹配 首先,我建议您在使用ngram时更改正在使用的字段类型,因为它会大大增加索引大小。最好创建一个新的字段类型,仅在您真正需要的字段中使用,而不是在不需要Ngram的地方创建可能索引其他值的文本字段类型 其次,如果您的analyzer定义的索引和搜索时间可以相同,则不需要复制配置,只需使用“analyzer”而不是“analyzer type=index”和“analyzer type=query” 我强烈建议您检查solr管理员中的“分析”选项卡,以了解solr如何为您的输入处理索引和查询的文本。当您试图获得某些特定结果时,还可以删除fieldType配置中的一些过滤器。最好了解每个过滤器对输入的作用