0

我将参数name作为文本

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

由于textElasticSearch 中类型的性质,匹配短语中的每个单词。这就是为什么在某些情况下我会得到下一个结果:

POST /example-tags/_search
{
  "query": {
    "match": {
     "name": "Jordan Rudess was born in 1956"
    }
  }
}

// Results 
{
  "took" : 28,
  "timed_out" : false,
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 2.1596613,
    "hits" : [
      {
        "_index" : "example-tags",
        "_type" : "_doc",
        "_id" : "6101e538bc8ec610aff699e4",
        "_score" : 4.1596613,
        "_source" : {
          "name" : "Jordan Rudess"
        }
      },
       {
        "_index" : "example-tags",
        "_type" : "_doc",
        "_id" : "610123538bc8ec61034ff699e4",
        "_score" : 4.1796613,
        "_source" : {
          "name" : "Alice in Chains"
        }
      },
    ]
  }
}

如您所见,在文本中,Jordan Rudess was born in 1956我得到Alice in Chains了单词的结果in。我想避免这种行为。如果我尝试:

POST /example-tags/_search
{
  "query": {
    "match_phrase": {
     "name": "Dream Theater keyboardist's Jordan Rudess was born in 1956"
    }
  }
}
// Results
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}

因此,在过去的示例中,我希望获得Jordan Rudess标签名称,但结果为空。
我需要获得tag.name一个短语中连续单词的最大出现次数。我怎样才能做到这一点?

4

0 回答 0