Jesse
Jesse

Reputation: 3

Only return search results that matches in all fields

I have fields for name and dimensions. The fields are: Name, dimensionLength, dimensionWidth and dimensionHeight.

I want query productX 10x20 only to return matches containing both dimensions. So query above can return productX 10x20x30 and productX 10x30x20, but shouldn't return productX 10x30x40.

The first results are fine, but i get many other irrelevant matches. Any Ideas how to avoid these irrelevant results?

To clarify, fields are:

 <field indexed="true" multiValued="true" name="Height_mm_Copy" stored="false" type="dimension"/>
 <field indexed="true" multiValued="true" name="Outside_diameter_mm_Copy" stored="false" type="dimension"/>
 <field indexed="true" multiValued="true" name="Inside_diameter_mm_Copy" stored="false" type="dimension"/>
 <field indexed="true" name="name" stored="true" type="title"/>

Fieldtype for dimensions:

 <fieldType class="solr.TextField" name="dimension" omitNorms="true" positionIncrementGap="100">
 <analyzer type="index">
 <tokenizer class="solr.WhitespaceTokenizerFactory"/>
 <filter class="solr.PatternReplaceFilterFactory" pattern="(\d+)+([.][0])" replacement="$1"/>
 <filter class="solr.TrimFilterFactory"/> 
 <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
 </analyzer>

 <analyzer type="query">
 <tokenizer class="solr.WhitespaceTokenizerFactory"/>
 <filter class="solr.PatternReplaceFilterFactory" pattern="," replace="all" replacement="."/>
 <filter class="solr.TrimFilterFactory"/>
 <filter class="solr.PatternReplaceFilterFactory" pattern="(\d+)+([.][0])" replacement="$1"/>
 <filter catenateAll="0" catenateNumbers="0" catenateWords="0" class="solr.WordDelimiterFilterFactory" generateNumberParts="1" generateWordParts="0" preserveOriginal="1" splitOnCaseChange="0" splitOnNumerics="1" types="wdfftypes.txt"/>
 <filter class="solr.ASCIIFoldingFilterFactory"/>
 <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
 </analyzer>

requestHandler:

  <requestHandler name="dismax" class="solr.SearchHandler" >
<lst name="defaults">
 <str name="defType">dismax</str>
 <str name="echoParams">explicit</str>
 <float name="tie">0.3</float>

 <str name="qf">
    supplierArticleId_Prefix
 </str>     
 <str name="fl">
    UUID,score
 </str>
 <str name="mm">
    3&lt;-1 5&lt;-2 6&lt;90%
 </str>
 <int name="ps">100</int>
 <str name="q.alt">*:*</str>
</lst>
<arr name="last-components">
   <str>spellcheck</str>
</arr>
</requestHandler>

Upvotes: 0

Views: 191

Answers (1)

Jesse
Jesse

Reputation: 3

Solved it by making a copy field of "name". By using <filter class="solr.PatternCaptureGroupFilterFactory" pattern="(\d+/*[xX]\d+)" preserve_original="false"/> in the fieldType for this field. So from string "product 10x20x30" only "10x20" remains indexed in this field.

Upvotes: 0

Related Questions