我有以下字符串“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/