我只是将 mu 客户数据库复制到 Elasticsearch 中以获得更快的结果。
在我的列表页面上,我有一个搜索字段,可以将任何字符串搜索到我的客户数据库中。搜索应该能够匹配电子邮件、名字、姓氏、身份证和电话的结果。
我创建了一个nGram
过滤器,只能匹配查询的一部分
ES.client.indices.putSettings({
index: `customer`,
body: {
analysis : {
index_analyzer: {
my_index_analyzer: {
type: "custom",
tokenizer: "standard",
filter: ["lowercase", "mynGram"]
}
},
search_analyzer: {
my_search_analyzer: {
type: "custom",
tokenizer: "standard",
filter: [ "standard", "lowercase", "mynGram"]
}
},
filter: {
mynGram: {
type: "nGram",
min_gram: 2,
max_gram: 30
}
}
},
max_ngram_diff: 30
}
})
我的查询是
{
"index":"customer",
"pageNum":1,
"perPage":20,
"query":{
"bool":{
"must":[
{
"bool":{
"should":[
{
"match":{
"organizationId":"org_1"
}
},
{
"match":{
"organizationId":"org_2"
}
}
]
}
},
{
"multi_match":{
"fields":[
"id",
"email",
"firstName",
"lastName",
"phone"
],
"query":"loc"
}
}
]
}
},
"sort":{
"createdAt":{
"order":"desc"
}
}
}
但这不是我想要的。
例如,我的一封电子邮件是test@geo.loc
,如果我搜索loc
我没有结果。
我用 4 封电子邮件进行了另一次测试test@geo.loc
test1@test.com
test2@test.com
test@test.com
。寻找test
它只会返回test@geo.loc
并且test@test.com
应该返回所有结果
其他测试电话号码之一是2211111111
如果我正在寻找1111
我没有结果但2211111111
可以工作