我们的solr字段中的数据如下所示:
<str name="property_Info_Hd">320 GB SATA 7200RPM</str>
<str name="property_Info_Hd">320GB SATA</str>
<str name="property_Info_Memory">4 GB of DDR2</str>
<str name="property_Info_Memory">2GB of DDR3</str>
该字段是动态的(&#34;属性_ *&#34;),因此两种情况都使用相同的分析器。
目前,在搜索&#34; 2gb&#34;时,它返回的文件为&#34; 2GB&#34;但未命中&#34; 2 GB&#34; (空白)。
问题是:如何在架构中设置此字段类型,以便匹配带有和没有空格的结果?
例如:
搜索+(property_Info_Memory:(&#34; 320gb&#34;))应返回上面的第一行,匹配&#34; 320GB&#34; AND &#34; 320 GB&#34;。
这是字段类型的设置方式:
<fieldType name="textFilter" class="solr.TextField"
positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
splitOnCaseChange="0"
splitOnNumerics="0"
stemEnglishPossessive="0"
catenateWords="1"
catenateNumbers="1"
catenateAll="1"
preserveOriginal="1"
generateWordParts="1"
generateNumberParts="1"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ISOLatin1AccentFilterFactory" />
</analyzer>
</fieldType>
我尝试过使用splitOnCase和splitOnNumerics变体,没有成功。然后结果将与具有空格(320 GB)的结果匹配并且错过非空白空间(320GB)。
大多数文档都有没有空格的数据,这就是当前设置的原因。
提前感谢您的帮助。
答案 0 :(得分:4)
使用分析工具。你可能想尝试一下: -
<fieldType name="textFilter" class="solr.TextField"
positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
catenateWords="1"
catenateNumbers="1"
catenateAll="1"
preserveOriginal="1"
generateWordParts="1"
generateNumberParts="1"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory"
splitOnNumerics="1"
preserveOriginal="1"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
分析 -
索引时间 - 2gb数据
查询时间 - 2gb 令牌 - 2gb,2 gb
在分析中生成2 gb作为标记,它在索引中显示匹配。
答案 1 :(得分:0)
我知道有两种方法可以做到这一点:
#2是更好的解决方案,但需要编写一些java。我建议只扩展WordDeliminterFilter;你可以看到SynonymTokenFilter的来源,了解如何创建同义词。