gpt4 book ai didi

elasticsearch - Elasticsearch部分匹配顺序

转载 作者:行者123 更新时间:2023-12-02 22:28:15 25 4
gpt4 key购买 nike

有没有一种方法可以按字段开头顺序返回sku,而无需向索引添加任何其他数据?

搜索查询示例:EXP-0931

返回:NI-EXP-0931是第一个结果,其次是EXP-0931 / 03 / P

我们希望使用EXP *的产品排在首位,我尝试关闭模糊性,将范围限制为仅sku字段,等等。

我的SKU字段的映射:

"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256

POST请求示例
{
"query": {
"match": {"sku": "EXP"}
}
}

结果示例
{
"took": 9,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.5989681,
"hits": [
{
"_index": "magento2_en_catalog_product_20190202_000937",
"_type": "product",
"_id": "398925",
"_score": 0.5989681,
"_source": {
"sku": "NI-EXP-0931"
}
},
{
"_index": "magento2_en_catalog_product_20190202_000937",
"_type": "product",
"_id": "398923",
"_score": 0.55341274,
"_source": {
"sku": " EXP-0931/03/P"
}
}
]
}
}

使用碎片映射
 "sku": {
"type": "text",
"fields": {
"untouched": {
"type": "keyword"
}
},
"copy_to": [
"search",
"spelling"
],
"analyzer": "shingle"
},

最佳答案

如果我正确理解了您的问题,那么您想搜索以以下内容开头的内容:EXP

但是您会得到类似以下结果:NI-EXP-0931。

我建议您阅读有关tokenizers的文章,以了解您希望如何对术语进行标记...例如,如果您使用Whitespace tokenizer,则搜索词NIC-EXP-0931仍然是一个单词,但是如果您使用Standard tokenizer,您将获得3个标记(NIC,EXP 0931)。

如果使用空白标记器,则搜索EXP-0931时不应返回NIC-EXP-0931

如果您希望能够完成搜索(以EX开头的单词),则建议阅读有关 token 过滤器的信息:N-Gram and Edge N-Gram token 过滤器。他们会告诉Elasticsearch如何为您完成搜索...

请查看this question的一些示例,以及有关构建完成提示的引用。

关于elasticsearch - Elasticsearch部分匹配顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54400482/

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