如何将 Solr Suggester ContextField 与布尔字段一起使用
How to use Solr Suggester ContextField with boolean field
我正在使用 Solr 6.0.0
我正在尝试过滤掉来自 Solr Suggester 的不需要的建议。在我的 Solr 数据库中,我有我所有的产品
我的产品都有一个布尔字段 "ShowOnSite"。准备销售的产品将此值设置为 true。尚未准备好的产品已将其设置为 false。
当我尝试使用此布尔字段过滤建议者的建议结果时,我总是得到 0 个结果,即使我有很多产品准备显示。
我的产品看起来有点像这样:
<field name="id" type="string" indexed="true" stored="true" required="true"/>
<field name="Name" type="string" indexed="true" stored="true"/>
<field name="ShowOnSite" type="boolean" indexed="true" stored="true" />
<field name="text_autocomplete" type="textSuggest" indexed="true" stored="true"/>
textSuggest 字段类型具有以下配置:
<fieldType class="solr.TextField" name="textSuggest" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我的推荐人是这样的
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.count">20</str>
<str name="wt">json</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">default</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="highlight">true</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">text_autocomplete</str>
<str name="weightField">InStock</str>
<str name="contextField">ShowOnSite</str>
<str name="suggestAnalyzerFieldType">textSuggest</str>
<str name="buildOnStartup">true</str>
</lst>
</searchComponent>
我的查询如下所示:
/suggest?suggest.q={querystring}&suggest.cfq=true
预计
我只收到 "ShowOnSite" == true
的产品
实际
我从建议者那里收到了 0 个产品
我也尝试过其他配置。通过使用 not true 我得到 all products:
/suggest?suggest.q={querystring}&suggest.cfq=-true
我也试过在cfq中添加字段名。这会产生 0 个产品:
/suggest?suggest.q={querystring}&suggest.cfq=ShowOnSite:true
编辑1
我也尝试过分别使用 0 或 1 表示 false 和 true。这些也不行
初步猜测这是由字段的布尔类型引起的,因为据我所知,没有对 cfq 使用的值进行任何分析。
将辅助字段设为字符串字段,并在该字段中逐字存储假值或真值 - 并将其用于过滤。
根据 MatsLindh 的建议。请改用文本字段。
最简单的方法是只复制该字段:
将此添加到索引的托管架构文件中(在 Solr 中):
<field name="THE_FIELD_TO_BE_USED_BY_THE_SUGGESTER" type="text_general" indexed="true" stored="true" multiValued="false"/>
<copyField source="YOUR_BOOLEAN_FIELD" dest="THE_FIELD_TO_BE_USED_BY_THE_SUGGESTER" maxChars="30000" />
我正在使用 Solr 6.0.0
我正在尝试过滤掉来自 Solr Suggester 的不需要的建议。在我的 Solr 数据库中,我有我所有的产品
我的产品都有一个布尔字段 "ShowOnSite"。准备销售的产品将此值设置为 true。尚未准备好的产品已将其设置为 false。
当我尝试使用此布尔字段过滤建议者的建议结果时,我总是得到 0 个结果,即使我有很多产品准备显示。
我的产品看起来有点像这样:
<field name="id" type="string" indexed="true" stored="true" required="true"/>
<field name="Name" type="string" indexed="true" stored="true"/>
<field name="ShowOnSite" type="boolean" indexed="true" stored="true" />
<field name="text_autocomplete" type="textSuggest" indexed="true" stored="true"/>
textSuggest 字段类型具有以下配置:
<fieldType class="solr.TextField" name="textSuggest" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我的推荐人是这样的
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.count">20</str>
<str name="wt">json</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">default</str>
<str name="lookupImpl">AnalyzingInfixLookupFactory</str>
<str name="highlight">true</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">text_autocomplete</str>
<str name="weightField">InStock</str>
<str name="contextField">ShowOnSite</str>
<str name="suggestAnalyzerFieldType">textSuggest</str>
<str name="buildOnStartup">true</str>
</lst>
</searchComponent>
我的查询如下所示:
/suggest?suggest.q={querystring}&suggest.cfq=true
预计 我只收到 "ShowOnSite" == true
的产品实际 我从建议者那里收到了 0 个产品
我也尝试过其他配置。通过使用 not true 我得到 all products:
/suggest?suggest.q={querystring}&suggest.cfq=-true
我也试过在cfq中添加字段名。这会产生 0 个产品:
/suggest?suggest.q={querystring}&suggest.cfq=ShowOnSite:true
编辑1 我也尝试过分别使用 0 或 1 表示 false 和 true。这些也不行
初步猜测这是由字段的布尔类型引起的,因为据我所知,没有对 cfq 使用的值进行任何分析。
将辅助字段设为字符串字段,并在该字段中逐字存储假值或真值 - 并将其用于过滤。
根据 MatsLindh 的建议。请改用文本字段。 最简单的方法是只复制该字段:
将此添加到索引的托管架构文件中(在 Solr 中):
<field name="THE_FIELD_TO_BE_USED_BY_THE_SUGGESTER" type="text_general" indexed="true" stored="true" multiValued="false"/>
<copyField source="YOUR_BOOLEAN_FIELD" dest="THE_FIELD_TO_BE_USED_BY_THE_SUGGESTER" maxChars="30000" />