当前位置: 首页 > 知识库问答 >
问题:

ElasticSearch搜索不匹配的分析字段

巴洲
2023-03-14

我有一个带有标准分析器的弹性搜索集群。我知道使用这个分析仪,术语“300”被分析为一种类型。

假设我正在搜索一个具有字段“name”的文档,该字段的值为“纸巾300 CT”,分析为[“Paper”(ALPHANUM)、“tower”(ALPHANUM)、“300”(NUM)、“CT”(ALPHANUM)]

目前,当我使用模糊/通配符查询时,如下所示:

    "query":
    {
   "bool":{
      "must":[
          {
            "bool":{
               "should":[
                  {
                     "fuzzy":{
                        "ec_item_name":{
                           "value":"300CT"
                        }
                     }
                  },
                   {
                     "wildcard":{
                        "ec_item_name":{
                           "value":"3*0*0*C*T*"
                        }
                     }
                  }
               ],
               "minimum_should_match": 1
            }
         }
      ]
   }
}

无论模糊性如何调整,模糊查询都不匹配。我希望术语“300CT”与“300”匹配。在“300CT”上匹配“300”也是如此。是否有一个分析器或一种实现自定义分析器的方法,以便对所有术语进行分析以支持这种类型的搜索?我很难找到关于这种行为的文档。

共有2个答案

江智
2023-03-14

注意模糊查询,它在为搜索创建模糊替代查询词之前不会分析查询文本。关于Elastic博客上的模糊查询,有一篇很好的文章解释了它们所陈述的模糊查询:

一般应避免使用弹性搜索模糊查询类型。

也就是说,我不能复制你的例子,因为当我用模糊性2搜索时,术语300CT匹配300。在Kibana开发工具中尝试以下示例:

PUT fuzzytest

PUT fuzzytest/_doc/1
{
  "name": "Paper towel 300 CT"
}

POST fuzzytest/_explain/1
{
  "query": {
    "fuzzy": {
      "name": {
        "value": "300CT",
        "fuzziness": 2
      }
    }
  }
}
葛修真
2023-03-14

您是否尝试过匹配查询和模糊性选项?

我已经试用了标准分析仪,它对我来说很好:

{
  "query": {
    "match": {
      "name": {
        "query": "300CT",
        "fuzziness": 2
      }
    }
  }
}
 类似资料:
  • 问题内容: 我正在尝试为最终用户提供搜索类型,这更像sqlserver。我能够为给定的SQL场景实现ES查询: 但是ES查询不适用于此sql查询 在我的elasticsearch以及通配符查询中,我还需要执行一些布尔过滤查询 上面的带有通配符搜索的弹性查询可以很好地工作,并让我获得所有与pete匹配且不是xyz和abc类型的文档。但是当我尝试使用以空格分隔的2个独立单词执行通配符时,相同的查询返回

  • 问题内容: 有没有办法让ElasticSearch在分析的字段上识别完全匹配?理想情况下,我想小写,标记化,词干化,甚至对我的文档进行语音化,然后让查询提取“精确”匹配项。 我的意思是,如果我索引“汉堡包”和“汉堡包”,它们将被分析为[“汉堡包”,“小圆面包”]和[“汉堡包”]。如果我搜索“汉堡”,它将仅返回“汉堡”文档,因为这是“完全匹配”。 我尝试使用关键字标记器,但不会阻止各个标记。我是否需

  • 问题内容: 我正在研究Elasticsearch 7.2版,并且正在 改善 应用程序发出的ES调用的性能。 根据我的阅读,如果我们尚未设置“搜索分析器”,则默认情况下将设置标准分析器。 但是,在不需要分析仪的情况下,安装分析仪可能会影响性能。是否将所有字段都用作“关键字”可以防止这种情况? 还是有其他方法可以禁用此“搜索分析器” 附言:对于任何答案,如果您能指出我基于答案的ES官方文档,我将不胜感

  • 问题内容: 使用GAE搜索API是否可以搜索部分匹配项? 我正在尝试创建自动完成功能,其中该术语将是部分单词。例如。 b bui 构建 都将返回“建筑物”。 GAE怎么可能? 问题答案: 尽管全文搜索不支持LIKE语句(部分匹配),但是您可以修改它。 首先,为所有可能的子字符串标记数据字符串(hello = h,he,hel,lo等) 使用标记化的字符串构建索引+文档(搜索API) 执行搜索,然后

  • 我已经完成了名称索引。它包含椅子、椅子等数据。 当我尝试用“cha”搜索时,它不会返回任何椅子。这是返回“毛毯”,我期待的文件有椅子。 下面是我的代码: 搜索请求: 搜索响应: } 映射: 我该怎么解决这个问题? 谢谢,Sri

  • 我的目标是搜索一个词,而不管添加了什么分析器。 我使用了匹配查询与关键字分析器,但我认为它可以与添加到该属性中的默认分析器一起工作。 在弹性搜索中,我的作者文档结构如下所示