如何为带有/不带特殊字符的所有类型的单词实现匹配和匹配短语前缀的一致行为



我创建了两个相等的 ap,它们从 Elastic 搜索中搜索文件:

例如:如果弹性搜索中的"queuename"字段具有队列、队列 1、队列 2 和 3queue 等值

  1. 等于 api:它返回的结果与输入字段值完全相等。(注意:我正在使用布尔匹配查询)

相等的 API 输入:队列名称 = 队列

相等的 API 结果:1 个包含队列名称 = 队列的文档

  1. 像 api :它返回归档值等于或超集的结果输入字段值。(注意:我正在使用匹配短语 prifix 查询)

像 API 输入一样:队列名称 = 队列

类似 API 结果:包含所有 4 个队列名称队列、队列 1、队列 2 和 3 个队列的文档。

注意:在我的映射中,我使用的是默认分析器,即标准

如果我使用带有特殊字符的队列名称,我的相等 api 的上述功能会中断(示例 #,$,@,. 等)

例如:如果弹性搜索中的"queuename"字段具有队列、队列#1、queue.2 和 3@queue

相等的 API 输入:队列名称 = 队列

实际的 eqaul api 结果:包含所有 4 个队列名称队列、队列 #1、队列.2 和 3@queue

的文档

预期 1 个包含队列名称 = 队列的文档

如果我将分析器从标准更改为空格,那么它适用于相等的 api,但我的 like api 无法获取预期结果(它不会搜索 3queue 或3@queue队列名称 = 队列)

我也尝试使用"索引":"not_analyzed",但这也只是让我的平等 api 工作并失败了我的喜欢 api 行为。

对于具有/没有特殊字符的所有类型的单词,如何实现相等和相似 api 的预期行为?

最后,

它声明了myqueuename,如下所示:

"queuename": {
"type": "string",
"index": "not_analyzed",
"fields": {
    "sloppy":   { "type": "string", "analyzer": "standard" }
}}

在我的 like API 中,我搜索 queuename.sloppy 而不是 queuename。看看这是否有效。

这以两种不同的方式分析数据 - 每个 API 一种。

最新更新