社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Elasticsearch

ElasticSearch放弃包含查询超集的文档

Andrew • 5 年前 • 1349 次点击  

假设我有三份文件:

{ "cities": "Paris Zurich Milan" }
{ "cities": "Paris Zurich" }
{ "cities": "Zurich"}

cities 只是文本,我不使用任何自定义分析器。
我要查询包含 城市 巴黎和苏黎世都是这样,没有其他城市。所以我只想得到第二份文件。

这就是我目前正在尝试的:

{
    "query": {
        "match_phrase": {
            "cities": "Paris Zurich"
        }
     }
}

但这也会返回第一个文档。 我应该怎么做?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37954
 
1349 次点击  
文章 [ 1 ]  |  最新文章 5 年前
briarheart
Reply   •   1 楼
briarheart    6 年前

如果您不关心区分大小写,只需使用 term 查询:

{
  "query": {
    "term": {
      "cities.keyword": "Paris Zurich"
    }
  }
}

它将只匹配字段的精确值。

另一方面,您可以创建自定义分析器,它仍然存储字段的确切值(就像 keyword )有一个例外:存储的值将被转换为小写,这样您就可以找到 Paris Zurich 以及 paris Zurich . 示例如下:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "lowercase_analyzer": {
          "type": "custom",
          "tokenizer": "keyword",
          "char_filter": [],
          "filter": ["lowercase"]
        }
      }
    }
  },
  "mappings": {
    "doc": {
      "properties": {
        "cities": {
          "type": "text",
          "fields": {
            "lowercased": {
              "type": "text",
              "analyzer": "lowercase_analyzer"
            }
          }
        }
      }
    }
  }
}

{
  "query": {
    "term": {
      "cities.lowercased": "paris zurich" // Query string should also be in lowercase
    }
  }
}