elasticsearch - 如何使Elasticsearch忽略某些查询之间的空格?

标签 elasticsearch query-analyzer

我的elasticsearch文档的字段Name带有以下条目:

Samsung Galaxy S3
Samsung Galaxy Ace Duos 3
Samsung Galaxy Duos 3
Samsung Galaxy S2
Samsung Galaxy S (I9000)

在使用以下查询(注意“s”和“3”之间的空格)来查询此字段时:
{
  "query": {
    "match": {
      "Name": {
        "query": "galaxy s 3",
        "fuzziness": 2,
        "prefix_length": 1
      }
    }
  }
}

它返回"Samsung Galaxy Duos 3"作为相关结果,而不是"Samsung Galaxy S3"

我为这种任务注意到的模式是忽略任何数字和任何单个字母字符之间的空格,并进行查询。例如,然后"I-phone 5s"也应返回"I-phone 5 s"

有没有一种很好的方法可以做到这一点?

最佳答案

您需要更改分析器,以将字符串从文本更改为数字时进行拆分-使用正则表达式会有所帮助(这基于camelcase analyser):

curl -XPUT 'localhost:9200/myindex/' -d '
     {
         "settings":{
             "analysis": {
                 "analyzer": {
                     "mynewanalyser":{
                         "type": "pattern",
                         "pattern":"([^\\p{L}\\d]+)|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)"
                     }
                 }
             }
         }
     }'

用您的字符串测试新的分析器:
-XGET 'localhost:9200/myindex/_analyze?analyzer=mynewanalyser&pretty' -d 'Samsung Galaxy S3'
{
  "tokens" : [ {
    "token" : "samsung",
    "start_offset" : 0,
    "end_offset" : 7,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "galaxy",
    "start_offset" : 8,
    "end_offset" : 14,
    "type" : "word",
    "position" : 2
  }, {
    "token" : "s",
    "start_offset" : 15,
    "end_offset" : 16,
    "type" : "word",
    "position" : 3
  }, {
    "token" : "3",
    "start_offset" : 16,
    "end_offset" : 17,
    "type" : "word",
    "position" : 4
  } ]
}

关于elasticsearch - 如何使Elasticsearch忽略某些查询之间的空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28106770/

相关文章:

Elasticsearch |将具有相同分数的结果随机化

Elasticsearch 使用关键字术语进行 KNN 搜索

django - 如何在仅具有 DRF 端点的服务器上分析 Django ORM 查询性能?

elasticsearch - 带有大型char_filter列表创建的自定义分析器,用于elasticsearch

elasticsearch - 限制来自ElastAlert的电子邮件通知中的内容

elasticsearch - 检索仅包含允许标签的文档(完全等于)

sql-server - 在 SQL Server 中打印文本字段内容的最简单方法

sql - 逻辑读取是如何计算的?

sql-server - SQL Server : How to abort a series of batches in Query Analyzer?

elasticsearch - 滚动API返回的滚动ID太长