gpt4 book ai didi

java - 在 Elasticsearch 中搜索列数据的最后四位

转载 作者:行者123 更新时间:2023-12-01 11:43:14 25 4
gpt4 key购买 nike

我需要使用 Elasticsearch 根据信用卡号的最后四位数字进行搜索。类似于sql LIKE。提前致谢

最佳答案

对字符串末尾的字符进行通配符/正则表达式搜索(在注释中建议)效率极低。

相反,你应该:

  1. 反转分析器中的字符串
  2. 使用前缀搜索来搜索字符串

因此,123456789 将被索引为 987654321 - 然后您还可以将搜索词 6789 反转为 9876 并针对 987654321 进行 9876 前缀搜索。

要在 Elasticsearch 中进行设置,它比听起来更简单:

创建索引并定义一个新的分析器,该分析器将在存储数据时反转数据:

curl -XDELETE 'http://localhost:9200/test'

curl -XPOST 'http://localhost:9200/test' -d '{
"analysis": {
"analyzer": {
"suffix_analyzer": {
"filter": ["lowercase", "reverse"],
"tokenizer": "keyword",
"type": "custom"}
}
}
}'

在映射中引用分析器:

curl -XPUT "http://localhost:9200/test/creditcard/_mapping" -d' {
"creditcard" : {
"properties": {
"cardnumber":{"type" : "string", "analyzer" : "suffix_analyzer"}
}
}
}'

发布一些数据(请注意,卡号没有颠倒):

curl -XPOST 'http://localhost:9200/test/creditcard' -d'
{
"cardnumber": "1234567890"
}'

然后match_phrase_prefix查询数据:

curl -XGET 'http://localhost:9200/test/creditcard/_search?pretty' -d '{
"query": { "match_phrase_prefix": { "cardnumber" : "7890"} }
}'

然后您应该取回您的数据:

{
"took" : 38,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.30685282,
"hits" : [ {
"_index" : "test",
"_type" : "creditcard",
"_id" : "AUxpxo4tY42JLXs1QAbE",
"_score" : 0.30685282,
"_source":
{
"cardnumber": "1234567890"
}

关于java - 在 Elasticsearch 中搜索列数据的最后四位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29341064/

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