Elasticsearch 检查标题是否已在类型中使用

Elasticsearch check if title is already used in type

我在 Elasticsearch 中收集了一个数据库,我没有通过 ID 来识别它们,而是通过标题来识别它们。因此,每种类型的标题都不相同。

我试过 must => match_phrase 但它让我在 return 中得到了不止一个。有些东西可能叫做 "Document 1",有些东西可能叫做 "Document 1,2,3"。因此,通过 match_phrase.

会 return 不止一个结果

假设我有 5 个文件名为:

  1. 文档示例 1
  2. 示例 1
  3. 1 个文档示例
  4. 文档示例 1 和 2
  5. 文档示例

我应该只向 return 发送什么请求,例如:"Document example"?

我尝试了这种搜索的不同变体 127.0.0.1:9200/index/type/_search:

{
    "query":{
        "match_phrase": {
            "title":"Document example"
        }
    }
}

所以我想知道如何检查或搜索准确的解析并在 return 中只得到一个或零个结果?

编辑

127.0.0.1:9200/myindex/mytype/_mapping return这是:

{
  "myindex": {
    "mappings": {
      "mytype": {
        "properties": {
          "category": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "date": {
            "type": "date"
          },
          "link": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "size": {
            "type": "long"
          },
          "source": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "title": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

只需在 title.keyword:

上使用 term 过滤器(精确 匹配)
{
  "query": {
    "term": {
      "title.keyword": {
        "value": "Document example"
      }
    }
  }
}