我想我在这里的某个地方犯了一个错误,任何帮助识别它的人都将不胜感激。我有一个自定义模式分析器/记号赋予器对:
(从_settings调用到我的索引的相关片段:
"analysis" : {
"analyzer" : {
"external_id_analyzer" : {
"tokenizer" : "external_id_tokenizer"
}
},
"tokenizer" : {
"external_id_tokenizer" : {
"flags" : "CASE_INSENSITIVE",
"pattern" : "[,_ -]",
"type" : "pattern"
}
}
},并且此分析器应用于索引上的一个字段:
"extId" : {
"type" : "text",
"boost" : 10.0,
"term_vector" : "with_positions_offsets",
"analyzer" : "external_id_analyzer"
}我的理解是,CASE_INSENSITIVE标志应该允许在不区分大小写的情况下匹配文本,然而,当我解释一个查询时,很明显在使用这个分析器时,匹配的文本区分大小写。
查询"DATA-HIR“的结果
Hit包含"extId" : "DATA-HIR_2014...",
解释详细信息:
"value" : 11.519202,
"description" : "weight(extId:DATA in 7) [PerFieldSimilarity], result of:",
...
"value" : 25.37294,
"description" : "weight(extId:HIR in 7) [PerFieldSimilarity], result of:",另一方面,查询"DATA-hir“得到相同的结果,但得分要低得多,因为解释计划缺少"HIR”匹配...
还有另一个字段具有相似的数据(只是值的" data -HIR“部分),但boost要低得多,它使用默认的分析器,而explain计划在那里显示不区分大小写的匹配。
因此,很明显,默认分析器匹配不区分大小写,但模式分析器不是。对于我在这个过程中犯了什么错误,有什么建议吗?
发布于 2021-08-02 14:20:31
当然,只是花时间把它打出来,并描述它,帮助我解决了它……我错过了自定义分析器也需要指定分析器的类型……在我的例子中,我的自定义分析器唯一需要的更改是标记化,所以我只需要将“标准”分析器添加到我的分析器定义中。例如,
"analysis" : {
"analyzer" : {
"external_id_analyzer" : {
"type" : "standard",
"tokenizer" : "external_id_tokenizer"
}
},
"tokenizer" : {
"external_id_tokenizer" : {
"pattern" : "[,_ -]",
"type" : "pattern"
}
}
}https://stackoverflow.com/questions/68622907
复制相似问题