我有以下字符串“Word1 Word2 StopWord1 StopWord2 Word3 Word4”。
当我使用[“bool”] [“must”] [“match”]查询此字符串时,我想返回所有与“Word1Word2”和/或“Word3Word4”匹配的文本。
我创建了一个分析器,我想将其用于索引和搜索。
使用分析API,我已经确认索引编制正确。返回的带状疱疹是“Word1Word2”和“Word3Word4”
我想查询以便返回与“Word1Word2”和/或“Word3Word4”匹配的文本。我如何动态地执行此操作-意思是,我不预先知道会生成多少个带状疱疹,所以我不知道要在查询中编写多少个match_phrase。

"should":[
       { "match_phrase" : {"content": phrases[0]}},
       { "match_phrase" : {"content": phrases[1]}}
 ]

最佳答案

要查询带状疱疹(和字母组合),您可以设置映射以在单独的字段中干净地处理它们。在下面的示例中,字段“带状疱疹”将用于分析和检索带状疱疹,而隐式字段将用于处理字母组合。

PUT /my_index
 {
  "settings": {
     "number_of_shards": 1,
     "analysis": {
        "filter": {
           "my_shingle_filter": {
              "type": "shingle",
              "min_shingle_size": 2,
              "max_shingle_size": 2,
              "output_unigrams": false
           }
        },
        "analyzer": {
           "my_shingle_analyzer": {
              "type": "custom",
              "tokenizer": "standard",
              "filter": [
                 "lowercase",
                 "my_shingle_filter"
              ]
           }
        }
     }
  }
}

PUT /my_index/_mapping/my_type
{
   "my_type": {
      "properties": {
         "title": {
            "type": "string",
            "fields": {
               "shingles": {
                  "type": "string",
                  "analyzer": "my_shingle_analyzer"
               }
            }
         }
      }
   }
}

GET /my_index/my_type/_search
{
   "query": {
      "bool": {
         "must": {
            "match": {
                "title": "<your query string>"
            }
         },
         "should": {
            "match": {
               "title.shingles": "<your query string"
            }
         }
      }
   }
}
引用Elasticsearch:权威指南...

关于elasticsearch - 如何在Elasticsearch中查询短语(带状疱疹),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62268491/

10-11 08:47