wad*_*aal 9 lucene indexing solr search-engine solr5
我有一个带有建议组件的Solr实例.它使用AnalyzingInfixLookupFactory
实现工作正常.
但是,我想将建议扩展到一个content
字段,该字段可以包含大量文本.建议者可以找到建议,但它返回整个字段值,而不仅仅是句子或句子的一部分.
所以,如果我想要一个"foo"的建议,并且该content
字段包含如下文本:
"我真的很喜欢比萨饼.还有甜甜圈.让我们从那个地方买点.这个酒吧吧."
建议将是整个文本,而不仅仅是"The foo bar place".而且,显然,当content
数百字长时,这不是可以用的.
有没有办法限制建议的返回单词数量?
这是我的搜索组件:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">autocomplete</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="indexPath">suggestions</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">suggest</str>
<str name="suggestAnalyzerFieldType">text_suggest</str>
<str name="buildOnStartup">false</str>
<bool name="highlight">false</bool>
<str name="payloadField">label</str>
</lst>
</searchComponent>
Run Code Online (Sandbox Code Playgroud)
这是请求处理程序:
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.dictionary">autocomplete</str>
<str name="suggest.count">10</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
Run Code Online (Sandbox Code Playgroud)
最后,这里是建议的派生领域:
<fieldType name="text_suggest" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="suggest" type="text_suggest" indexed="true" multiValued="true" stored="true"/>
Run Code Online (Sandbox Code Playgroud)
然后,我使用一堆<copyField>
s来复制内容.
编辑2015-08-28
该content
字段定义如下:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="txt/mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="txt/stopwords.txt" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" splitOnNumerics="0" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="25"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="txt/mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="content" type="text" indexed="true" stored="true" termVectors="true"/>
Run Code Online (Sandbox Code Playgroud)
编辑2016-09-28
这个问题可能是相关的:Solr SuggestComponent能够返回带状疱疹而不是整个字段值吗?
小智 2
我认为您可能正在寻找的是solr.ShingleFilterFactory,它只是允许根据字数限制令牌大小,而不是像您一直在尝试使用的solr.NGramFilterFactory中那样限制文本长度。
请参阅 SOLR wiki 页面了解更多详细信息:
https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.ShingleFilterFactory