考虑以下文件:

{
  "Title": "Western Europe"
}

我想针对 Title 字段运行此类搜索查询
  • 西欧的苹果
  • 东欧的苹果

  • 我可以运行一个简单的匹配查询:
    POST /_search
    {
      "query": {
        "match": {
          "Title": "Apple in Western Europe"
        }
      }
    }
    

    显然,无论我使用哪个搜索词组,它都会匹配并将其带回来。但是我想做一个查询,只有在标题字段短语与我的搜索查询匹配时才会返回我的文档。那可能吗?有没有额外的参数?对于 phrase matching 来说,这似乎是一个相反的案例。

    如果没有,我应该考虑用带状疱疹重新索引我的数据吗?

    因此,在这种情况下,运行它(带有附加参数)不会得分并带回我的文档。
    POST /_search
    {
      "query": {
        "match": {
          "Title": "Apple in Eastern Europe"
        }
      }
    }
    

    tl; 博士

    如果我的搜索查询中存在所有字段(我正在搜索的字段) token ,我如何编写一个可以带回文档的查询?
    例如我在文档中的字段只包含这两个标记:
  • abc
  • xyz

  • 如果我的搜索词组是,例如 Lorem ipsum dolor sat amet, consectetur adipiscing elit abc xyz ,则文档是 带回

    如果是 Lorem ipsum dolor sat amet, consectetur adipiscing elit xyz ,则是 而不是

    最佳答案

    您可以使用 Percolator 查询 ( ES Documentation ):

  • 索引您希望与
  • 匹配的查询
  • 与与查询关联的元数据兼容
  • 在搜索请求中发送文档
  • 获取匹配
  • 的查询

    您的用例示例
    创建映射
  • query : 接受具有
  • 背后所有功能的 ES 查询
  • Title :元数据(可选)
  • PUT /my_index
    {
        "mappings": {
            "properties": {
                "Title": {
                    "type": "text"
                },
                "query": {
                    "type": "percolator"
                }
            }
        }
    }
    
    添加文档
    PUT /my_index/_doc/1
    {
      "query": {
        "match_phrase": {
          "Title": "Western Europe"
        }
      },
      "Title": "Western Europe"
    }
    
    获取匹配的查询
    POST /my_index/_search
    {
        "query": {
            "percolate": {
                "field": "query",
                "document": {
                    "Title": "Apple in Western Europe"
                }
            }
        }
    }
    

    关于Elasticsearch 反向 match_phrase,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32779023/

    10-14 16:08