【发布时间】:2017-09-28 12:43:58
【问题描述】:
我在Name 字段的Solr 中搜索一些短语。我为Name 尝试了不同的配置,类型为string 或任何自定义TextField。
<fieldType name="string" class="solr.StrField" sortMissingLast="true"
docValues="true" />
<fieldType name="alphaOnlySort" class="solr.TextField"
sortMissingLast="true" omitNorms="true">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory"/>
<filter class="solr.PatternReplaceFilterFactory" replace="all"
replacement="" pattern="([^a-z])"/>
</analyzer>
</fieldType>
我这样定义Name:
然后尝试像字符串:
我也尝试了不同的标记器和过滤器组合,但没有成功。
这就是我想要的:我有短语“测试拆分”,并且我有一些名称为 'test'、'test 124'、'testblablabla' 和 'test split 124' 的条目。
我发现'test' 条目在我的示例中是第一个匹配项,并且“测试拆分”的排名要低得多,尽管它有更多匹配的字母。
为什么会这样??
我正在使用 solr 管理界面进行测试,我的 q(查询)参数是:
Name:*test split*
编辑 1:
我还尝试创建名为 ExactName 的具有以下配置的 copyField:
<fieldType name="exact" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我这样搜索:
Name:*test split* OR (ExactName:*test split*)^5.0
“测试”仍然出现在“测试拆分”之前:(
【问题讨论】:
-
您是否尝试过为 (e)dismax 处理程序使用
pf、pf2或pf3参数?创建这些是为了增强匹配序列。另请记住,通配符搜索将跳过分析链的大部分部分。 -
那里写什么?我的字段名称“名称”。我试过了,但还是一无所获
-
文档的排名与 lucence 评分功能有关,在 Solr 6 之前为
tf-idf,在 Solr 6 之后为BM25。 Here is a good post comparing the two.