Hi
I am indexing the name "FC St. Gallen" using the following type:
<fieldType name="prefix_token" class="solr.TextField"
positionIncrementGap="1">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory"
mapping="mapping-ISOLatin1Accent.txt" />
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1"
generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"
splitOnCaseChange="1"/>
<filter class="solr.StopFilterFactory" ignoreCase="true"
words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1"
maxGramSize="20" />
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory"
mapping="mapping-ISOLatin1Accent.txt" />
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1"
generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"
splitOnCaseChange="1"/>
<filter class="solr.StopFilterFactory" ignoreCase="true"
words="stopwords.txt" enablePositionIncrements="true" />
</analyzer>
</fieldType>
Which according to analysis.jsp gets split into:
f | fc | s | st | g | ga | gal | gall | galle | gallen
So far so good.
Now if I search for "fc st.gallen" according to analysis.jsp it will search for:
fc | st | gallen
But when I do a dismax search using the following handler:
<requestHandler name="auto" class="solr.SearchHandler" default="true">
<lst name="defaults">
<str name="defType">dismax</str>
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="qf">name firstname email^0.5 telefon^0.5 city^0.6
street^0.6</str>
<str name="fl">id,type,name,firstname,zipcode,city,street,urlizedname</str>
</lst>
</requestHandler>
I do not get a match.
Looking at the debug of the query I can see that its actually splitting the
query into "fc" and "st gallen":
<str name="rawquerystring">fc st.gallen</str>
<str name="querystring">fc st.gallen</str>
<str name="parsedquery">
+((DisjunctionMaxQuery((telefon:fc^0.5 | firstname:fc | email:fc^0.5 |
street:fc^0.6 | city:fc^0.6 | name:fc)) DisjunctionMaxQuery((telefon:"st
gallen"^0.5 | firstname:"st gallen" | email:"st gallen"^0.5 | street:"st
gallen"^0.6 | city:"st gallen"^0.6 | name:"st gallen")))~2) ()
</str>
<str name="parsedquery_toString">
+(((telefon:fc^0.5 | firstname:fc | email:fc^0.5 | street:fc^0.6 | city:fc^0.6
| name:fc) (telefon:"st gallen"^0.5 | firstname:"st gallen" | email:"st
gallen"^0.5 | street:"st gallen"^0.6 | city:"st gallen"^0.6 | name:"st
gallen"))~2) ()
</str>
Whats going on there?
regards,
Lukas Kahwe Smith
[email protected]