Solr SuggestComponent 是否能够 return 带状疱疹而不是整个字段值?
Is Solr SuggestComponent able to return shingles instead of whole field values?
我使用 solr 5.0.0 并想创建一个自动完成功能,该功能会根据我的文档的单词语法(或带状疱疹)生成建议。
问题是,在建议查询的 return 中,我只能得到完整的 "terms" 搜索字段,该字段可能非常长。
当前问题:
输入:"so"
建议:
"......超长文本 son 长文本继续......"
“......下一个长文本 solar 下一个文本继续......”
目标:
输入:"so"
关于带状疱疹的建议:
"所以n"
"所以lar"
所以lar测试
等等
<searchComponent name="suggest" class="solr.SuggestComponent"
enable="${solr.suggester.enabled:true}" >
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">title_and_description_suggest</str>
<str name="weightField">price</str>
<str name="suggestAnalyzerFieldType">autocomplete</str>
<str name="queryAnalyzerFieldType">autocomplete</str>
<str name="buildOnCommit">true</str>
</lst>
schema.xml:
<fieldType name="autocomplete" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="true" outputUnigramsIfNoShingles="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
我想 return 最多 3 个单词作为自动完成项。这对 SuggestComponent 来说可能吗?或者你会怎么做?无论我尝试什么,我总是会收到匹配文档的完整字段值。
这是预期的行为还是我做错了什么?
非常感谢
在schema.xml中定义fieldType如下:
<fieldType name="text_autocomplete" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="5"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
在schema.xml中定义你的字段如下:
<field name="example_field" type="text_autocomplete" indexed="true" stored="true"/>
按如下方式编写您的查询:
query?q=*&
rows=0&
facet=true&
facet.field=example_field&
facet.limit=-1&
wt=json&
indent=true&
facet.prefix=so
在 facet.prefix 字段中,指定要搜索的搜索词(在本例中为 'so')。如果您在建议中需要少于 5 个单词,请相应地减少 fieldType 定义中的 maxShingleSize。默认情况下,您将按照出现频率的降序获得结果。
我使用 solr 5.0.0 并想创建一个自动完成功能,该功能会根据我的文档的单词语法(或带状疱疹)生成建议。 问题是,在建议查询的 return 中,我只能得到完整的 "terms" 搜索字段,该字段可能非常长。
当前问题:
输入:"so" 建议: "......超长文本 son 长文本继续......"
“......下一个长文本 solar 下一个文本继续......”
目标:
输入:"so"
关于带状疱疹的建议:
"所以n"
"所以lar"
所以lar测试
等等
<searchComponent name="suggest" class="solr.SuggestComponent"
enable="${solr.suggester.enabled:true}" >
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">title_and_description_suggest</str>
<str name="weightField">price</str>
<str name="suggestAnalyzerFieldType">autocomplete</str>
<str name="queryAnalyzerFieldType">autocomplete</str>
<str name="buildOnCommit">true</str>
</lst>
schema.xml:
<fieldType name="autocomplete" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_de.txt" format="snowball"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="true" outputUnigramsIfNoShingles="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
我想 return 最多 3 个单词作为自动完成项。这对 SuggestComponent 来说可能吗?或者你会怎么做?无论我尝试什么,我总是会收到匹配文档的完整字段值。
这是预期的行为还是我做错了什么?
非常感谢
在schema.xml中定义fieldType如下:
<fieldType name="text_autocomplete" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="5"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
在schema.xml中定义你的字段如下:
<field name="example_field" type="text_autocomplete" indexed="true" stored="true"/>
按如下方式编写您的查询:
query?q=*&
rows=0&
facet=true&
facet.field=example_field&
facet.limit=-1&
wt=json&
indent=true&
facet.prefix=so
在 facet.prefix 字段中,指定要搜索的搜索词(在本例中为 'so')。如果您在建议中需要少于 5 个单词,请相应地减少 fieldType 定义中的 maxShingleSize。默认情况下,您将按照出现频率的降序获得结果。