2017-08-14 8 views
0

名前と寸法のフィールドがあります。フィールドは、Name,dimensionLength,dimensionWidthおよびdimensionHeightです。すべてのフィールドに一致する検索結果のみを返します

クエリproductX 10x20は両方のディメンションを含む一致を返すようにします。したがって、上記のクエリはproductX 10x20x30productX 10x30x20を返すことができますが、productX 10x30x40は返さないでください。

最初の結果は問題ありませんが、私は多くの無関係のマッチが多くあります。これらの無関係な結果を避ける方法はありますか?明確にするために

は、フィールドは、次のとおりです。寸法について

<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:

<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> 

答えて

0

は "名前" のコピーフィールドを作成することによってそれを解決しました。このフィールドのfieldTypeに <filter class="solr.PatternCaptureGroupFilterFactory" pattern="(\d+/*[xX]\d+)" preserve_original="false"/>を使用します。したがって、文字列「product 10x20x30」からは、「10x20」だけがこのフィールドにインデックスされます。

関連する問題