Как использовать Solr Suggester ContextField с логическим полем - PullRequest
0 голосов
/ 14 июня 2019

Я использую 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 имеет следующую конфигурацию:

  <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 proucts от предложителя

Я также пробовал другие конфигурации.Используя значение true, я получаю все продукты:

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

Я также попытался добавить имя поля в cfq.Это дает 0 продуктов:

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

EDIT1 Я также попытался использовать 0 или 1 для false и true соответственно.Они тоже не работают

1 Ответ

0 голосов
/ 17 июня 2019

Первоначальное предположение состоит в том, что это вызвано булевым типом поля, поскольку, насколько мне известно, никакого анализа не происходит для значений, используемых cfq.

Создайте вторичное поле как строковое поле и сохраните дословно ложное или истинное значение в этом поле - и используйте его для фильтрации.

...