我正在尝试找出如何配置elasticsearch的方法,以便可以在包含连字符的字段上使用通配符进行查询字符串搜索。

我有看起来像这样的文档:

{
   "tags":[
      "deck-clothing-blue",
      "crew-clothing",
      "medium"
   ],
   "name":"Crew t-shirt navy large",
   "description":"This is a t-shirt",
   "images":[
      {
         "id":"ba4a024c96aa6846f289486dfd0223b1",
         "type":"Image"
      },
      {
         "id":"ba4a024c96aa6846f289486dfd022503",
         "type":"Image"
      }
   ],
   "type":"InventoryType",
   "header":{
   }
}

我试图使用word_delimiter过滤器和空白标记器:
{
"settings" : {
    "index" : {
        "number_of_shards" : 1,
        "number_of_replicas" : 1
    },
    "analysis" : {
        "filter" : {
            "tags_filter" : {
                "type" : "word_delimiter",
                "type_table": ["- => ALPHA"]
            }
        },
        "analyzer" : {
            "tags_analyzer" : {
                "type" : "custom",
                "tokenizer" : "whitespace",
                "filter" : ["tags_filter"]
            }
        }
    }
},
"mappings" : {
    "yacht1" : {
        "properties" : {
            "tags" : {
                "type" : "string",
                "analyzer" : "tags_analyzer"
            }
        }
    }
}
}

但是这些是搜索(用于标签)及其结果:
deck*     -> match
deck-*    -> no match
deck-clo* -> no match

谁能看到我要去哪里错了?

谢谢 :)

最佳答案

分析仪很好(尽管我会丢失过滤器),但是未指定搜索分析仪,因此它使用标准分析仪搜索标签字段,该标签字段会去除连字符,然后尝试对其进行查询(运行curl "localhost:9200/_analyze?analyzer=standard" -d "deck-*"以查看我的意思是说)

基本上,将“deck- *”搜索为“deck *”,因为没有单词仅包含“deck”,所以它失败了。

正在搜索“deck-clo *”作为“deck clo *”,再次没有单词仅仅是“deck”或以“clo”开头,因此查询失败。

我将进行以下修改

"analysis" : {
    "analyzer" : {
        "default" : {
            "tokenizer" : "whitespace",
            "filter" : ["lowercase"] <--- you don't need this, just thought it was a nice touch
        }
    }
}

然后摆脱标签上的特殊分析仪
"mappings" : {
    "yacht1" : {
        "properties" : {
            "tags" : {
                "type" : "string"
            }
        }
    }
}

让我知道事情的后续。

关于elasticsearch - Elasticsearch中带连字符的索引字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16698517/

10-11 09:04