我是有弹性搜索的新手,在下列情况下有困难:
我需要类似于shingles过滤器的东西,它将从查询中创建以下标记:
"token1 token2“、"token2 token3”、"token3 token4“、"token4 token5”
并通过这些标记进行精确匹配,因此令牌"token2 token3“和"token4 token5”将匹配文档。
提前感谢!
发布于 2016-10-20 20:28:54
这可以通过使用板条滤器并使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"
}
}
}https://stackoverflow.com/questions/40145690
复制相似问题