我正在尝试搜索全名,电子邮件或电话
例如
如果我开始输入“+16”,它将显示所有电话号码开头或包含“+16”的用户。与全名和电子邮件相同
我的ES配置是:
{
"users" : {
"mappings" : {
"user" : {
"properties" : {
"full_name" : {
"analyzer" : "trigrams",
"include_in_all" : true,
"type" : "string"
},
"phone" : {
"type" : "string",
"analyzer" : "trigrams",
"include_in_all" : true
},
"email" : {
"analyzer" : "trigrams",
"include_in_all" : true,
"type" : "string"
}
},
"dynamic" : "false"
}
},
"settings" : {
"index" : {
"creation_date" : "1472720529392",
"number_of_shards" : "5",
"version" : {
"created" : "2030599"
},
"uuid" : "p9nOhiJ3TLafe6WzwXC5Tg",
"analysis" : {
"analyzer" : {
"trigrams" : {
"filter" : [
"lowercase"
],
"type" : "custom",
"tokenizer" : "my_ngram_tokenizer"
}
},
"tokenizer" : {
"my_ngram_tokenizer" : {
"type" : "nGram",
"max_gram" : "12",
"min_gram" : "2"
}
}
},
"number_of_replicas" : "1"
}
},
"aliases" : {},
"warmers" : {}
}
}
按名称搜索名称“Robert”
curl -XGET'本地主机:9200 / users / _search?pretty'-d'
{
“查询”:{
“比赛”: {
“_all”:“抢”
}
}
}'
仅使用全名不会给出预期的结果。
最佳答案
由于您的分析器是在full_name
,phone
和email
字段上设置的,因此您不应使用_all
字段,而应在multi_match
查询中枚举这些字段,如下所示:
curl -XGET 'localhost:9200/users/_search?pretty' -d'{
"query": {
"multi_match": {
"query": "this is a test",
"fields": [
"full_name",
"phone",
"email"
]
}
}
}'
关于ruby-on-rails-4 - 在任何列中搜索单词的任何部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39267417/