Reputation: 13
I have a field defined as follows:
<fieldType name="textcleaning" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory"
pattern="^\p{Punct}*(.*?)\p{Punct}*$"
replacement="$1"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory"
pattern="^\p{Punct}*(.*?)\p{Punct}*$"
replacement="$1"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
I want to facet on this field, but I get both direct and reversed tokens in the answer:
"\u0001fo",90671,
"of",90671,
"\u0001detinu",82915,
"united",82915,
"\u0001grebmoolb",74461,
"bloomberg",74461,
Is there a way to filter the reversed tokens out of my facet results? I tried using facet.prefix, but was unsuccessful.
Upvotes: 0
Views: 267
Reputation: 52802
Use a dedicated field that has the definition you want for your facets - i.e. create a similar field without the ReversedWildcardFilterFactory
and use that for faceting instead. You can still search and filter against the field that you've already created.
Also, in general, you normally want to use a StrField for faceting as you'll get a facet for each token generated (as you can see here), but if your use case makes sense with a facet for each token in the value, this solution should work fine.
Upvotes: 1