我创建了两个相等的 ap,它们从 Elastic 搜索中搜索文件:
例如:如果弹性搜索中的"queuename"字段具有队列、队列 1、队列 2 和 3queue 等值
- 等于 api:它返回的结果与输入字段值完全相等。(注意:我正在使用布尔匹配查询)
相等的 API 输入:队列名称 = 队列
相等的 API 结果: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 一种。