3

示例:
基于美丽搜索: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>
4

2 回答 2

4

您可以使用通配符查询。

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

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

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

于 2012-11-20T23:20:06.313 回答
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>
于 2012-11-21T17:49:16.567 回答