是否可以将模糊与词条查询一起使用而不匹配? 让我解释一下:
假设我们有4个文档
{ "index": { "_id": 1 }}
{ "text": "I play football!"}
{ "index": { "_id": 2 }}
{ "text": "I love playing"}
{ "index": { "_id": 3 }}
{ "text": "X is the best player"}
{ "index": { "_id": 4 }}
{ "text": "plyaer"}
使用时:
GET /index/my_type/_search
{
"query": {
"fuzzy": {
"value": "player",
"fuzziness": 1
}
}
}
我明白了:
{ "index": { "_id": 3 }}
{ "text": "X is the best player"}
{ "index": { "_id": 4 }}
{ "text": "plyaer"}
但是我只想要带有模糊的结果,该结果对应于模糊度= 1的“精确” match(“ term”)
答案 0 :(得分:0)
每次进行精确匹配时,您都需要输入Keyword类型的字段,因为与Text类型不同,它不会进入Analysis阶段
我已经在示例映射下面创建了一个示例映射,其中字段myfield
是一个multi-field,如下面的映射所示。
映射
{
"myfield":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
然后您可以在类型keyword
而不是text
类型的字段上执行模糊搜索。
myfield.keyword上的模糊查询
POST <your_index_name>/_search
{
"query": {
"fuzzy": {
"myfield.keyword": {
"value": "player",
"fuzziness": 2
}
}
}
}
或者,您可以为这两种类型构造模糊查询,关键字类型具有更高的提升,这样具有完全匹配项的结果就会出现在顶部。
POST <your_index_name>/_search
{
"query": {
"bool": {
"should": [
{
"fuzzy": {
"myfield.keyword": {
"value": "player",
"fuzziness": 2,
"boost": 10
}
}
},
{
"fuzzy": {
"myfield": {
"value": "player",
"fuzziness": 2,
"boost": 2
}
}
}
]
}
}
}
希望这会有所帮助。