如何在 Elasticsearch 中查询短语(带状疱疹)



>我有以下字符串"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]}}
]

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

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: The Definitive Guide....

最新更新