gpt4 book ai didi

elasticsearch - ElasticSearch:使用雪球分析器时奇怪的搜索行为

转载 作者:行者123 更新时间:2023-12-02 23:41:52 24 4
gpt4 key购买 nike

假设我有一个定义如下的ElasticSearch索引:

curl -XPUT 'http://localhost:9200/test' -d '{
"mappings": {
"example": {
"properties": {
"text": {
"type": "string",
"analyzer": "snowball"
}
}
}
}
}'

curl -XPUT 'http://localhost:9200/test/example/1' -d '{
"text": "foo bar organization"
}'

当我使用Snowball Analyzer搜索“foo机构”时,两个关键字均符合预期:
curl -XGET http://localhost:9200/test/example/_search -d '{
"query": {
"text": {
"_all": {
"query": "foo organizations",
"analyzer": "snowball"
}
}
},
"highlight": {
"fields": {
"text": {}
}
}
}'

{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.015912745,
"hits": [
{
"_index": "test",
"_type": "example",
"_id": "1",
"_score": 0.015912745,
"_source": {
"text": "foo bar organization"
},
"highlight": {
"text": [
"<em>foo</em> bar <em>organization</em>"
]
}
}
]
}
}

但是,当我只搜索“组织”时,我什么都没有得到,这很奇怪:
curl -XGET http://localhost:9200/test/example/_search -d '{
"query": {
"text": {
"_all": {
"query": "organizations",
"analyzer": "snowball"
}
}
},
"highlight": {
"fields": {
"text": {}
}
}
}'

{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}

但是,如果我搜索“酒吧”,它仍然会命中:
curl -XGET http://localhost:9200/test/example/_search -d '{
"query": {
"text": {
"_all": {
"query": "bars",
"analyzer": "snowball"
}
}
},
"highlight": {
"fields": {
"text": {}
}
}
}'

{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.10848885,
"hits": [
{
"_index": "test",
"_type": "example",
"_id": "1",
"_score": 0.10848885,
"_source": {
"text": "foo bar organization"
},
"highlight": {
"text": [
"foo <em>bar</em> organization"
]
}
}
]
}
}

我猜想“酒吧”和“组织”之间的区别在于,“组织”是源于“器官”,而“酒吧”是源于自身。但是,如何获得正确的行为以使第二次搜索成功?

最佳答案

文本“foo bar的组织”被索引两次-在文本字段和 _all 字段中。字段文本使用雪球分析器,而字段 _all 使用标准分析器。因此,在对测试记录进行分析之后,字段 _all 包含 token :“foo”,“bar”和“organization”。在搜索过程中,指定的雪球分析器将“foo”转换为“foo”,将“bars”转换为“bar”,将“organization”转换为“organ”。因此,查询中的单词“foo”和“bars”与测试记录匹配,而术语“organization”则不匹配。突出显示是在每个字段的基础上进行的,与搜索无关,这就是为什么单词“organization”在第一个结果中突出显示的原因。

关于elasticsearch - ElasticSearch:使用雪球分析器时奇怪的搜索行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9700962/

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