So I have a database indexed in solr, and I'm trying to filter the search suggestions(suggester) using ContextField/cfq. What I am trying to do is filter the suggestion queries to either elements that have the context field (a boolean field) set to false, or that don't have the field.Using just false doesn't work, I'm not sure how to formulate it inside the suggest.cfq field inside solrconfig.xml, since the field is already declared as a contextfield and it doesn't seem like I can do (-myfield:[* TO *] AND :) OR myfield:false. How to do what I want to do?
The relevant chunk of 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>
Hope it helps someone.
Specify
contextField
in the suggester component(pieceSuggest
suggester
in your case). For<str name="contextField">hidden</str>
change thecfq
field value inrequestHandler
as :It should give all the suggest fields having
false
or no value ofhidden
field