我在我的 Solr 架构(.xml)中声明了“text_general_rev”字段类型,如下所示:
<fieldType
name="text_general_rev"
class="solr.TextField"
positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter
class="solr.ReversedWildcardFilterFactory"
withOriginal="true"
maxPosAsterisk="2"
maxPosQuestion="2"
maxFractionAsterisk="1.0" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
我有 2 个 Solr 文档,其中“艺术家”字段设置为“text_general_rev”,如下所示:
Document1 艺术家是“Jimmy Jones Tim Coco Mimi”
Document2 艺术家是“Jones Jimmy Tim Bobo Mimi”
如果我进行“从某事开始”的搜索,它们会按照我的意愿工作:
+artist:(J*)
返回文档 1 和 2
+artist:(Jim*)
返回文件 1
+artist:(Jimmy Jo*)
返回文件 1
另一方面,类似的查询,但类型为“以某些东西结尾”的工作方式不同:
+artist:(*Mimi)
返回文档 1 和 2(没关系)
+artist:(*Coco Mimi)
返回 0 个结果(这是不行的)
+artist:("*Coco Mimi")
返回 0 个结果(这是不行的)
+artist:(*co Mimi)
返回 0 个结果(这是不行的)
+artist:("*co Mimi")
返回 0 个结果(这是不行的)
我的问题是为什么会这样?这是否正常,如果是,我错过了什么?我尝试了 maxFractionAsterisk 的多个值(如 0、0.5、1 等。这是我不完全理解的 ReversedWildcardFilterFactory 的唯一配置参数)。