Elasticsearch:在文本末尾查找术语

时间:2019-01-29 13:58:21

标签: elasticsearch

我正在Elasticsearch 5.x中索引以下文档:

{
    "id": 1
    "description": "The quick brown fox"
}

{
    "id": 2
    "description": "The fox runs fast"
}

如果我在这些文档中搜索单词"fox",我将同时获得它们。  如何查找其description字段以单词"fox"结尾的文档?在上面的示例中,我正在寻找带有id=1

的那个

如果可能的话,我更喜欢使用Query String

2 个答案:

答案 0 :(得分:1)

好的正则表达式应该起作用。请注意,如果您需要花费大量时间寻找结尾,最好使用分析仪重新索引(https://discuss.elastic.co/t/elasticsearch-ends-with-word-in-phrases/60473

"regexp":{
            "id": {
                "value": "*fox",
            }
        }

答案 1 :(得分:0)

确保索引映射包含用于描述的keyword field。例如:

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "description": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "id": {
          "type": "long"
        }
      }
    }
  }
}

添加文档:

POST my_index/_doc
{
    "id": 1,
    "description": "The quick brown fox"
}

POST my_index/_doc
{
    "id": 2,
    "description": "The fox runs fast"
}

并使用如下查询字符串:

GET /my_index/_search
{
    "query": {
        "query_string" : {
            "default_field" : "description.keyword",
            "query" : "*fox"
        }
    }
}