在solr例子中的部分单词搜索:sarvesh,我想搜索像rves

时间:2012-11-20 11:48:52

标签: solr

实例:美丽
基于搜索:auti ...
我想只搜索一个单词的一部分,而不是整个单词 例如,当我只搜索auti中间的3个字母时,而不是整个单词。我没有得到结果:目前我正在使用带有apache solr(也许是视图)的搜索api。 有什么建议吗?
我正在使用这个

<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
    <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="10"/>
    </analyzer>
</fieldType>

2 个答案:

答案 0 :(得分:4)

您可以使用通配符查询。

在上面的示例中,您应该使用星号前缀和附加搜索字词,因此如果有人搜索auti,您发送给服务器的查询将是 auti

这应该包含所有包含单词auti的单词的结果。

http://www.solrtutorial.com/solr-query-syntax.html

答案 1 :(得分:1)

既然你想在单词中搜索子字符串,你可以在你的定义中添加side =“back”,这可以帮助你实现目标。

因此,您的字段类型定义如下所示:

<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
    <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="10" side="front" />
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="10" side="back" />
    </analyzer>
</fieldType>
相关问题