如何使用带有布尔字段的Solr建议者ContextField

时间:2019-06-14 09:17:53

标签: solr boolean search-suggestion

我正在使用 Solr 6.0.0

我正试图从Solr建议程序中过滤掉不需要的建议。我的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具有以下配置:

  <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条结果

我也尝试了其他配置。如果使用不正确,则会得到所有产品:

/suggest?suggest.q={querystring}&suggest.cfq=-true

我也试图在cfq中添加字段名称。这将产生0个产品:

/suggest?suggest.q={querystring}&suggest.cfq=ShowOnSite:true

EDIT1 我也尝试分别使用0或1分别代表false和true。这些也不起作用

2 个答案:

答案 0 :(得分:0)

最初的猜测是这是由该字段的布尔类型引起的,因为据我所知,对于cfq使用的值,没有任何分析发生。

将辅助字段设为字符串字段,并在该字段中逐字存储假值或真值-并将其用于过滤。

答案 1 :(得分:0)

如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" />