gpt4 book ai didi

search - Elasticsearch 与词干匹配

转载 作者:行者123 更新时间:2023-11-29 02:46:33 25 4
gpt4 key购买 nike

如何搜索词干匹配项?

即目前,我有很多文档在 item_title 字段中包含“skateboard”一词,但只有 3 个文档包含“skateboards”一词。因此,当我进行以下搜索时:

POST /my_index/my_type/_search
{
"size": 100,
"query" : {
"multi_match": {
"query": "skateboards",
"fields": [ "item_title^3" ]
}
}
}

我只得到 3 个结果。但是,我还想退回带有“滑板”一词的文件。

据我对 Elasticsearch 的了解,我希望这是通过在 item_title 字段上指定一个映射来完成的,该字段包含一个分析器,该分析器为每个单词的词干版本编制索引,但我似乎无法找到有关如何执行此操作的文档,这表明它是以不同的方式完成的。

建议?

最佳答案

这是一个例子:

PUT /stem
{
"settings": {
"analysis": {
"filter": {
"filter_stemmer": {
"type": "stemmer",
"language": "english"
}
},
"analyzer": {
"tags_analyzer": {
"type": "custom",
"filter": [
"standard",
"lowercase",
"filter_stemmer"
],
"tokenizer": "standard"
}
}
}
},
"mappings": {
"test": {
"properties": {
"item_title": {
"analyzer": "tags_analyzer",
"type": "text"
}
}
}
}
}

索引一些示例文档:

POST /stem/test/1
{
"item_title": "skateboards"
}
POST /stem/test/2
{
"item_title": "skateboard"
}
POST /stem/test/3
{
"item_title": "skate"
}

执行查询:

GET /stem/test/_search
{
"query": {
"multi_match": {
"query": "skateboards",
"fields": [
"item_title^3"
]
}
},
"fielddata_fields": [
"item_title"
]
}

并查看结果:

  "hits": [
{
"_index": "stem",
"_type": "test",
"_id": "1",
"_score": 1,
"_source": {
"item_title": "skateboards"
},
"fields": {
"item_title": [
"skateboard"
]
}
},
{
"_index": "stem",
"_type": "test",
"_id": "2",
"_score": 1,
"_source": {
"item_title": "skateboard"
},
"fields": {
"item_title": [
"skateboard"
]
}
}
]

我还添加了 fielddata_fields 元素,这样您就可以看到该字段的内容是如何被索引的。如您所见,在这两种情况下,索引词都是 skateboard

关于search - Elasticsearch 与词干匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32229255/

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