我已经在这里和他们看了很多例子和其他问题,我的配置非常接近我需要的但我最后一点也不知道我有一个问题。锻炼的时间。我在寻找像以下这样的价值观:
solar powered
solar glass
solar globe
solar lights
solar magic
solid brass
solid copper
我想要的是什么:
sol
,结果应包含所有这些值。这很有效。solar
,我应该只获得前五个。这很有效。solar gl
,我应该只获得solar glass
和solar globe
。这不起作用。相反,我为solar
获得了一组匹配,为gl
获得了第二组匹配。简而言之,我想将输入字符串视为一个整体,无论是否有任何空格。我收集这是通过创建一个单独的查询(与索引)分析器完成,但我无法使其工作。任何人都可以建议一个能让我得到我正在寻找的配置吗?
我(尝试失败)尝试过:
"solar gl"
mm=100%
这是我目前的架构:
<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>
答案 0 :(得分:16)
终于找到了答案!我知道我非常接近。原来我的配置是正确的,我只需要更改我的查询。
KeywordTokenizerFactory
以便将字符串作为一个整体编入索引。SpellCheckComponent
作为请求处理程序。q=<string>
查询,而是spellcheck.q=<string>
查询。鉴于上面提到的源字符串和spellcheck.q=solar+gl
的查询,这会得到所需的结果:
solar glass
solar globe
答案 1 :(得分:0)
我已经尝试了很多次,但我得出的结论是开箱即用。 我找到了一个解决方法:
我将数据编入索引,在每个单词之间添加特殊字符,以便它们不会被标记化。 例如:
solarzzzzzzpowered
solarzzzzzzglass
solarzzzzzzglobe
然后在撰写查询时,请确保在您键入的两个字词之间添加相同数量的字符,例如solr gl
变为solarzzzzzzgl
。
这将达到您所要求的行为。
另一个选择是不使用autosuggestion字段并为自己创建一个自定义字段,但是你必须自己管理通配符搜索和所有索引,并且在时间和性能方面不太方便。 / p>
答案 2 :(得分:0)
您可以使用Committee
或AnalyzingInfixLookupFactory
您可以在此处找到更多详细信息和其他建议算法:http://alexbenedetti.blogspot.de/2015/07/solr-you-complete-me.html
Solr配置
FreeTextLookupFactory