我在Solr中有一个代表公司的记录 - 公司名称位于名为" owner_name"具有" something.net"的价值。如果我对" owner_name执行Solr查询:某事"我没有得到任何结果,但如果我搜索" owner_name:something.net"我做。
以下是此字段正在使用的fieldType定义
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt"
enablePositionIncrements="true"/>
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt"
enablePositionIncrements="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
我不明白为什么这不会被标记为&#34;某些东西&#34;和&#34; net&#34;。我想要&#34; something.net&#34;也可以返回结果,但大多数人只会搜索&#34;某些东西&#34;。
我可以做些什么来搜索&#34;某些东西&#34;和&#34; something.net&#34;返回此记录?
我正在寻找的这个词实际上是&#34; sawhorse.net&#34; - 我只是在用#34;&#34;是通用的。我使用现场分析器玩了更多,我发现sawhorse.net正在扩展(见屏幕截图)。最后,词干分析器正在改变形式,但这种情况发生在索引和查询上,所以我仍然不知道为什么它不起作用。以下是现场分析器的截图
答案 0 :(得分:0)
好的 - 我的错 - 但也许有人可以从中吸取教训。
解决方案是名称实际上是“SawHorse.net” - 我没有意识到“H”是资本。单词分隔符将其分解为['sawhorse.net','saw','horse','net'] - 如果我没有.net,那么preserveOriginals和LowerCaseFilterFactory就会匹配它。
我通过添加一个来解决它 在索引和查询部分的末尾 - 结果显示如下。
“sawhorse.net” - 之后
答案 1 :(得分:0)
您的<analyzer type="index">
与<analyzer type="query">
部分不匹配。您在索引上设置了solr.WordDelimiterFilterFactory,但没有为查询设置。这意味着如果一个单词在索引时被分解(让我们说一段时间,但也可能是连字符或其他任何被配置为拆分单词的东西),如果你在查询时搜索同一个单词,它不会以同样的方式解析它。
一般来说,在Solr中,您希望将索引过滤器和标记器与查询时过滤器和标记器匹配。有些情况下你没有,但它们要么记录在过滤器或标记器的描述中,要么在你经过一段时间的实验后对一个非常具体的用例进行调整。
有关solr.WordDelimiterFilterFactory正在做什么的详细信息,请访问此处 - https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters