【问题标题】:elasticsearch match query in array数组中的elasticsearch匹配查询
【发布时间】:2020-12-03 15:06:21
【问题描述】:

我已经使用条款进行查询,效果很好。

{
  "query": {
   "terms": {
          "130": [
            "jon@domain.com",
            "mat@domain.com"
          ]
        }
  }
}

找到 2 个文档。

但现在我想用匹配构建类似的查询(想找到域中的所有用户)。我试过跟随查询没有任何结果

{
  "query": {
   "match": {
          "130": {
            "query":"@domain.com"
          }
        }
  }
}

找到 0 个文档。为什么??

字段 130 具有以下映射:

"130":{"type":"text","analyzer":"whitespace","fielddata":true}

【问题讨论】:

  • 请添加索引的映射。
  • @OpsterESNinjaNishant 请看看我的更新
  • 这是一个解决方案,可让您匹配电子邮件地址中的任何内容:stackoverflow.com/a/36200119/4604579

标签: elasticsearch


【解决方案1】:

如果您使用的是空白分析器,那么生成的令牌将是:

{
  "tokens": [
    {
      "token": "jon@domain.com",
      "start_offset": 0,
      "end_offset": 14,
      "type": "word",
      "position": 0
    }
  ]
}

所以terms query 将与上述标记匹配,因为它返回的文档在提供的字段中包含一个或多个精确术语,但匹配查询将给出 0 个结果

相反,您应该使用standard analyzer(这是默认值),它将生成以下令牌:

{
  "tokens": [
    {
      "token": "jon",
      "start_offset": 0,
      "end_offset": 3,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "domain.com",
      "start_offset": 4,
      "end_offset": 14,
      "type": "<ALPHANUM>",
      "position": 1
    }
  ]
}

您甚至可以使用uax_url_email tokenizer,它类似于标准标记器,只是它将 URL 和电子邮件地址识别为单个标记。

添加一个包含索引数据、映射、搜索查询和搜索结果的工作示例

索引映射:

 {
  "mappings": {
    "properties": {
      "130": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      }
    }
  }
}

索引数据:

{
    "130":"jon@domain.com"
}

搜索查询:

{
  "query": {
    "match": {
      "130": {
        "query": "@domain.com"
      }
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "65121147",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.2876821,
        "_source": {
          "130": "jon@domain.com"
        }
      }
    ]

【讨论】:

  • 请注意 @ 实际上并不匹配,因为它已被标准分析器删除。
  • 是的@Val,我刚刚提到了 uax_url_email 标记器,OP 可以根据他的用例使用它:)
  • @Ilya 你有机会看我的回答吗,期待得到你的反馈?
  • @llya 好久不见了。我希望你做得很好?你有机会浏览我的答案吗,期待得到你的反馈?
猜你喜欢
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 2018-09-24
  • 2020-03-25
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多