我在这里查看了大量示例和其他问题,从他们那里,我的配置非常接近我需要的,但我错过了最后一点,我正在努力锻炼. 我正在搜索以下值:
solar powered
solar glass
solar globe
solar lights
solar magic
solid brass
solid copper
我想要的是:
- 如果我搜索
sol
结果应该包括所有这些值。这行得通。 - 如果我搜索,
solar
我应该只得到前五个。这行得通。 - 如果我搜索,
solar gl
我应该只得到solar glass
andsolar globe
。这不起作用。相反,我得到了一组匹配项solar
和另一组匹配项gl
。
简而言之,我想将输入字符串视为一个整体,而不考虑任何空格。我收集这是通过创建一个单独的查询(与索引)分析器来完成的,但我无法使其工作。任何人都可以建议一个可以让我得到我想要的配置吗?
我(未成功)尝试过:
- 查询
"solar gl"
- 查询
mm=100%
- 使用 KeywordTokenizerFactory 定义单独的查询和索引分析器。(我不知道我以为那会做什么。)
- 定义索引分析器而不是查询分析器。
- 定义没有分词器的查询分析器。
这是我当前的架构:
<field name="suggest_phrase" type="suggest_phrase"
indexed="true" stored="false" multiValued="false" />
和字段定义:
<fieldType name="suggest_phrase" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
和配置:
<searchComponent name="suggest_phrase" class="solr.SpellCheckComponent">
<lst name="spellchecker">
<str name="name">suggest_phrase</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.fst.FSTLookup</str>
<str name="field">suggest_phrase</str>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest_phrase">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest_phrase</str>
<str name="spellcheck.onlyMorePopular">true</str>
<str name="spellcheck.count">10</str>
<str name="spellcheck.collate">false</str>
</lst>
<arr name="components">
<str>suggest_phrase</str>
</arr>
</requestHandler>