gpt4 book ai didi

ElasticSearch:带状疱疹 - 如果字段包含确切的带状疱疹标记则匹配短语

转载 作者:行者123 更新时间:2023-11-29 02:55:35 28 4
gpt4 key购买 nike

我是 Elasticsearch 的新手,遇到以下情况时遇到问题:

  1. 假设我有 2 个文档,其中只包含一个字段“文本”
    1. “文本”:“token1 token4”
    2. “文本”:“token2 token3”
    3. “文本”:“token4 token5”
  2. 通过查询文本“token1 token2 token3 token4 token5”,我只想找到文档 2 和 3

我需要类似于 shingles 过滤器的东西,它将根据查询创建以下标记:

["token1 token2", "token2 token3", "token3 token4", "token4 token5"]

并将通过这些标记进行精确匹配,因此标记“token2 token3”和“token4 token5”将匹配文档

提前致谢!

最佳答案

这可以通过使用 shingle filter 来完成并使 output_unigrams false(它将阻止生成单个标记)。像这样创建你的索引

PUT shingle_index
{
"settings": {
"analysis": {
"analyzer": {
"shingle_analyzer": {
"tokenizer": "standard",
"filter": [
"shingle_filter",
"lowercase"
]
}
},
"filter": {
"shingle_filter":{
"type" : "shingle",
"max_shingle_size" : 2,
"min_shingle_size" : 2,
"output_unigrams" : false,
"output_unigrams_if_no_shingles" : true
}
}
}
},
"mappings": {
"mytype":{
"properties": {
"text" : {
"type": "string",
"analyzer": "shingle_analyzer"
}
}
}
}
}

索引一些示例文档。

POST /shingle_index/mytype/_bulk
{"index":{"_id":5}}
{"text":"token1 token4"}
{"index":{"_id":3}}
{"text":"token2 token3"}
{"index":{"_id":2}}
{"text":"token4 token5"}

然后简单的匹配查询会给你想要的结果。

GET shingle_index/_search
{
"query": {
"match": {
"text": "token1 token2 token3 token4"
}
}
}

关于ElasticSearch:带状疱疹 - 如果字段包含确切的带状疱疹标记则匹配短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40145690/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com