search - 按字符串列表过滤 solr 拆分
问题描述
我的 Solr 实现中有这个 fieldType
<fieldType name="suggestion_text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
splitOnNumerics="1"
preserveOriginal="1"
/>
<filter class="solr.EdgeNGramFilterFactory" maxGramSize="100"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
这几乎适用于我拥有的每个模型。例如对于型号 AB1234,我可以搜索 1234 并找到它。但是我想包括一个特殊情况,我正在尝试找到比当前更好的解决方案:
假设 AB 是制造商,1234 是实际零件号,但在我的数据库中它们保存为 AB1234。我有一个 A0 制造商和 A01234 零件号,如果我搜索 1234,我不会找到它。
我找到了将 EdgeNGramFilterFactory 转换为 NGramFilterFactory 的解决方法,但这不是我想要的解决方案。我希望 Solr 能够搜索排除前两个字符(如果它们是字母+数字或在极端情况下),但我需要它使用 A0 和不使用 A0 进行搜索。
我不知道我是否清楚。无论如何,我尝试使用正则表达式,创建一个新字段并在其上使用此过滤器:
<filter class="solr.PatternReplaceFilterFactory" pattern="(A0)" replacement="" replace="all" />
或者
<filter class="solr.PatternReplaceFilterFactory" pattern="[a-zA-Z][0-9]" replacement="" replace="all" />
但这并没有给出预期的结果。
你能帮助我吗?谢谢
解决方案
请尝试以下字段类型来解决您的问题。
<fieldType name="text_en_splitting_test" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" splitOnNumerics="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
这适用于以下搜索词。
- AB1234
- AB
- 1234
请找到带有搜索词的建议字段类型的 solr 分析页面的屏幕截图。
推荐阅读
- oracle - 一次查询中的 Oracle 删除/更新
- node.js - AWS Lambda NodeJS 调用 SQL Server 不返回数据和错误
- python-3.x - 如何从字节数组中提取 2-9 位数组?
- java - 如何使用带有 List 参数的泛型函数
- apache-spark - Spark SQL 中 Group By 子句的底层实现
- javascript - Unable to read properties of a property containing the object
- javascript - React Context vs Javascript window
- php - 升级 Magento 2.2 > 2.3.2 - 创建对象时发生类型错误:Magento\Framework\Communication\Config\Data
- numpy - Numpy float128 没有给出正确答案
- go - 如何通过反射将非指针值复制到指针间接值