Решите предложения с ContextField: не все объекты имеют это поле

Итак, у меня есть база данных, проиндексированная в solr, и я пытаюсь отфильтровать предложения поиска (подсказка) с помощью ContextField / cfq. То, что я пытаюсь сделать, это отфильтровать запросы предложения к тем элементам, у которых контекстное поле (логическое поле) установлено в false, или в которых нет поля. Использование только false не работает, я не уверен как сформулировать это в поле offer.cfq внутри solrconfig.xml, так как поле уже объявлено как поле контекста и не похоже, что я могу это сделать (-myfield: [* TO *] AND:) ИЛИ myfield:false, Как сделать то, что я хочу сделать?

Соответствующий кусок solrconfig.xml:

<searchComponent name="suggest" class="solr.SuggestComponent">
 <lst name="suggester">
    <str name="name">composerSuggest</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="indexPath">suggestions/composerSuggest_dict</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">composers_searchable</str>
    <str name="weightField">price</str>
    <str name="suggestAnalyzerFieldType">suggestTypeLc</str>
    <str name="buildOnStartup">true</str>
    <str name="buildOnCommit">false</str>
    <str name="highlight">false</str>
 </lst>
 <lst name="suggester">
    <str name="name">pieceSuggest</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="indexPath">suggestions/pieceSuggest_dict</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">pieces_searchable</str>
    <str name="weightField">price</str>
    <str name="contextField">hidden</str>
    <str name="suggestAnalyzerFieldType">suggestTypeLc</str>
    <str name="buildOnStartup">true</str>
    <str name="buildOnCommit">false</str>
    <str name="highlight">false</str>
 </lst>
 <lst name="suggester">
    <str name="name">collectionSuggest</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="indexPath">suggestions/collectionSuggest_dict</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">collections_searchable</str>
    <str name="weightField">price</str>
    <str name="suggestAnalyzerFieldType">suggestTypeLc</str>
    <str name="buildOnStartup">true</str>
    <str name="buildOnCommit">false</str>
    <str name="highlight">false</str>
 </lst>
 <lst name="suggester">
    <str name="name">languageSuggest</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="indexPath">suggestions/languageSuggest_dict</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">languages_searchable</str>
    <str name="weightField">price</str>
    <str name="suggestAnalyzerFieldType">suggestTypeLc</str>
    <str name="buildOnStartup">true</str>
    <str name="buildOnCommit">false</str>
    <str name="highlight">false</str>
 </lst>
 <lst name="suggester">
    <str name="name">genreSuggest</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="indexPath">suggestions/genreSuggest_dict</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">genres_searchable</str>
    <str name="weightField">price</str>
    <str name="suggestAnalyzerFieldType">suggestTypeLc</str>
    <str name="buildOnStartup">true</str>
    <str name="buildOnCommit">false</str>
    <str name="highlight">false</str>
 </lst>
 <lst name="suggester">
    <str name="name">locationSuggest</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="indexPath">suggestions/locationSuggest_dict</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">locations_searchable</str>
    <str name="weightField">price</str>
    <str name="suggestAnalyzerFieldType">suggestTypeLc</str>
    <str name="buildOnStartup">true</str>
    <str name="buildOnCommit">false</str>
    <str name="highlight">false</str>
 </lst>
 <lst name="suggester">
    <str name="name">sourceSuggest</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="indexPath">suggestions/sourceSuggest_dict</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">sources_searchable</str>
    <str name="weightField">price</str>
    <str name="suggestAnalyzerFieldType">suggestTypeLc</str>
    <str name="buildOnStartup">true</str>
    <str name="buildOnCommit">false</str>
    <str name="highlight">false</str>
 </lst>
 <lst name="suggester">
    <str name="name">instrumentSuggest</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="indexPath">suggestions/instrumentSuggest_dict</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">instruments_voices_searchable</str>
    <str name="weightField">price</str>
    <str name="suggestAnalyzerFieldType">suggestTypeLc</str>
    <str name="buildOnStartup">true</str>
    <str name="buildOnCommit">false</str>
    <str name="highlight">false</str>
 </lst>
 <lst name="suggester">
    <str name="name">tagSuggest</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="indexPath">suggestions/tagSuggest_dict</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">tags_searchable</str>
    <str name="weightField">price</str>
    <str name="suggestAnalyzerFieldType">suggestTypeLc</str>
    <str name="buildOnStartup">true</str>
    <str name="buildOnCommit">false</str>
    <str name="highlight">false</str>
 </lst>
</searchComponent>
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy" >
 <lst name="defaults">
   <str name="suggest">true</str>
   <str name="suggest.count">15</str>
   <str name="suggest.cfq">(-hidden:[* TO *] AND *:*) OR hidden:false</str>
</lst>
<arr name="components">
  <str>suggest</str>
</arr>

1 ответ

Надеюсь, это поможет кому-то.

Уточнить contextField в компоненте подсказки (pieceSuggestsuggester в твоем случае). За <str name="contextField">hidden</str> изменить cfq значение поля в requestHandler как:

 <str name="suggest.cfq">-true</str>

Должны быть указаны все предлагаемые поля, имеющие false или нет значения hidden поле

Другие вопросы по тегам