gpt4 book ai didi

elasticsearch - 使用 Elasticsearch 来搜索号码

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

我有一些具有id属性的记录,因此我需要使用Elasticsearch搜索我的id字段。但是用户没有确切的ID,因此,如果用户尝试使用部分数字(如果部分匹配),则应返回结果。

例如,一旦我键入12,Id为1234,则应返回此记录
关于字符串的任何想法都包含数值的(*)行为?

最佳答案

如果您关心前缀搜索,即仅当用户开始搜索1234时才搜索id 12,则它应该返回id而不是23,这将提高性能,并且可以使用Elasticsearch中的perfix query轻松实现。

如果即使用户错过了开头的字符并搜索1234,也要使用23,那么您可能需要使用n-gram tokenizer创建一个自定义分析器,该分析器将创建122334123234之类的 token ,以便您提供中缀搜索也一样

注意:prefix queriesn-gram tokenizer均不适用于数字字段。您需要在文本字段中存储您的用户ID,以使其正常运行。

注释中要求的n-gram tokenizer的工作示例

索引定义

{
"settings": {
"index.max_ngram_diff": 10,
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "ngram",
"min_gram": 1,
"max_gram": 10
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
},
"mappings": {
"properties": {
"uid": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer" : "standard"
}
}
}
}

索引样本文档
{
"uid" : "1234"
}

**搜索 12 **
{
"query": {
"match" : {
"uid" : {
"query" : "12"
}
}
}
}

结果
"hits": [
{
"_index": "intdata",
"_type": "_doc",
"_id": "1",
"_score": 0.45532417,
"_source": {
"uid": "1234"
}
}
]

同样,它将返回 2312334等的结果

关于elasticsearch - 使用 Elasticsearch 来搜索号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61842231/

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