Solr 4.10 - Suggester 不适用于多值字段
Solr 4.10 - Suggester is not working with multi-valued field
大家好,我使用的是 solr 4.10,但我没有得到预期的结果。我想使用 discountCatName、discountSubName 和 vendorName 等多个字段获得自动完成建议。我使用复制字段创建了一个多值字段 "suggestions",并使用该字段在建议配置中进行搜索。
注意:discountSubName & discountCatName 又是多值字段,vendorName 是字符串。
这是来自我的文档之一的建议字段数据:
"suggestions": [
"Budget Car Rental",
"Car Rentals",
"Business Deals",
"Auto",
"Travel",
"Car Rentals" ]
如果我输入 "car",我的建议是 "Budget Car Rental" 而不是 "Car Rentals",下面是我的配置。如果我需要更改分词器,请告诉我,filters.Any 对此提供帮助将不胜感激。
下面是我根据上面的场景解释的代码块。
建议字段、fieldType、searchComponent 和请求处理程序,我分别使用它们来自动完成建议
<!--suggestion field -->
<field name="suggestions" type="suggestType" indexed="true" stored="true" multiValued="true"/>
<copyField source="discountCatName" dest="suggestions"/>
<copyField source="discountSubName" dest="suggestions"/>
<copyField source="vendorName" dest="suggestions"/>
<!--suggest fieldType -->
<fieldType name="suggestType" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[^a-zA-Z0-9]" replacement=" " />
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
</analyzer>
</fieldType>
<!--suggest searchComponent configuration -->
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">analyzing</str>
<str name="lookupImpl">BlendedInfixLookupFactory</str>
<str name="suggestAnalyzerFieldType">suggestType</str>
<str name="blenderType">linear</str>
<str name="minPrefixChars">1</str>
<str name="doHighlight">false</str>
<str name="weightField">score</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">suggestions</str>
<str name="buildOnStartup">true</str>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
<!--suggest request handler -->
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy" >
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.count">10</str>
<str name="suggest.dictionary">analyzing</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
我刚刚通过调试 Solr 4.10 源代码发现 DocumentDictionaryFactory 查找中存在错误,它总是查找多值字段的第一个字符串,然后停止该文档的建议,因此我没有得到预期的输出我上面的配置。
我为所有要应用搜索的字段创建了一个单独的索引,例如 catName0...catName10、subName0...subName10,然后为每个字段创建了多个建议词典,最后我解析了响应表单建议词典将它们合并并根据权重和突出显示位置进行排序。
冗长的方法,但没有其他方法,因为需要此 solr 4.10。
大家好,我使用的是 solr 4.10,但我没有得到预期的结果。我想使用 discountCatName、discountSubName 和 vendorName 等多个字段获得自动完成建议。我使用复制字段创建了一个多值字段 "suggestions",并使用该字段在建议配置中进行搜索。
注意:discountSubName & discountCatName 又是多值字段,vendorName 是字符串。 这是来自我的文档之一的建议字段数据:
"suggestions": [
"Budget Car Rental",
"Car Rentals",
"Business Deals",
"Auto",
"Travel",
"Car Rentals" ]
如果我输入 "car",我的建议是 "Budget Car Rental" 而不是 "Car Rentals",下面是我的配置。如果我需要更改分词器,请告诉我,filters.Any 对此提供帮助将不胜感激。
下面是我根据上面的场景解释的代码块。
建议字段、fieldType、searchComponent 和请求处理程序,我分别使用它们来自动完成建议
<!--suggestion field -->
<field name="suggestions" type="suggestType" indexed="true" stored="true" multiValued="true"/>
<copyField source="discountCatName" dest="suggestions"/>
<copyField source="discountSubName" dest="suggestions"/>
<copyField source="vendorName" dest="suggestions"/>
<!--suggest fieldType -->
<fieldType name="suggestType" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[^a-zA-Z0-9]" replacement=" " />
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
</analyzer>
</fieldType>
<!--suggest searchComponent configuration -->
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">analyzing</str>
<str name="lookupImpl">BlendedInfixLookupFactory</str>
<str name="suggestAnalyzerFieldType">suggestType</str>
<str name="blenderType">linear</str>
<str name="minPrefixChars">1</str>
<str name="doHighlight">false</str>
<str name="weightField">score</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">suggestions</str>
<str name="buildOnStartup">true</str>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
<!--suggest request handler -->
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy" >
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.count">10</str>
<str name="suggest.dictionary">analyzing</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
我刚刚通过调试 Solr 4.10 源代码发现 DocumentDictionaryFactory 查找中存在错误,它总是查找多值字段的第一个字符串,然后停止该文档的建议,因此我没有得到预期的输出我上面的配置。
我为所有要应用搜索的字段创建了一个单独的索引,例如 catName0...catName10、subName0...subName10,然后为每个字段创建了多个建议词典,最后我解析了响应表单建议词典将它们合并并根据权重和突出显示位置进行排序。
冗长的方法,但没有其他方法,因为需要此 solr 4.10。