gpt4 book ai didi

elasticsearch - Elasticsearch 中带连字符的索引字段

转载 作者:行者123 更新时间:2023-11-29 02:48:06 24 4
gpt4 key购买 nike

我正在尝试弄清楚如何配置 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/

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