使用句子中的句号搜索不匹配 - 为什么?

时间:2014-05-19 11:35:22

标签: solr

我在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正在扩展(见屏幕截图)。最后,词干分析器正在改变形式,但这种情况发生在索引和查询上,所以我仍然不知道为什么它不起作用。以下是现场分析器的截图

sawhorse sawhorse.net

2 个答案:

答案 0 :(得分:0)

好的 - 我的错 - 但也许有人可以从中吸取教训。

解决方案是名称实际上是“SawHorse.net” - 我没有意识到“H”是资本。单词分隔符将其分解为['sawhorse.net','saw','horse','net'] - 如果我没有.net,那么preserveOriginals和LowerCaseFilterFactory就会匹配它。

我通过添加一个来解决它 在索引和查询部分的末尾 - 结果显示如下。

“锯木架” - 之前 searching for "sawhorse" - before change

“锯木架” - 之后 searching for "sawhorse" - after change

“sawhorse.net” - 之后 searching for "sawhorse.net" - after change

答案 1 :(得分:0)

您的<analyzer type="index"><analyzer type="query">部分不匹配。您在索引上设置了solr.WordDelimiterFilterFactory,但没有为查询设置。这意味着如果一个单词在索引时被分解(让我们说一段时间,但也可能是连字符或其他任何被配置为拆分单词的东西),如果你在查询时搜索同一个单词,它不会以同样的方式解析它。

一般来说,在Solr中,您希望将索引过滤器和标记器与查询时过滤器和标记器匹配。有些情况下你没有,但它们要么记录在过滤器或标记器的描述中,要么在你经过一段时间的实验后对一个非常具体的用例进行调整。

有关solr.WordDelimiterFilterFactory正在做什么的详细信息,请访问此处 - https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters