我设置了一个索引,它有许多表示用户数据的类型,例如ShoppingList,Playlist等。每种类型都有一个“identity_id”字段,用于表示用户的唯一标识符。我使用以下查询来搜索用户的所有类型和字段(对于网站中的搜索功能):
GET _search
{
"query": {
"filtered": {
"query": {
"match_phrase_prefix": {
"_all": "awesome"
}
},
"filter": {
"match": {
"identity_id": 1
}
}
}
}
}
我的问题是:
答案 0 :(得分:1)
这个提升某些字段的查询怎么样:
{
"query": {
"function_score": {
"query": {
"multi_match": {
"query": "awesome",
"fields": [
"*_name",
"field*"
]
}
},
"functions": [
{
"weight": 2,
"filter": {
"multi_match": {
"query": "awesome",
"fields": [
"*_name"
]
}
}
},
{
"weight": 1,
"filter": {
"multi_match": {
"query": "awesome",
"fields": [
"field*"
]
}
}
}
]
}
}
}
上述查询的作用是提升(weigth: 2
)*_name
字段查询,而不是对名为field*
的字段应用任何提升。
上述方式是对特定用户进行全文搜索(查询然后过滤)最有效的方法吗?那么为每个用户创建一个索引呢?
关于这个问题,这个问题更复杂,你还需要考虑你拥有多少用户,集群拥有的硬件资源,数据结构,使用的查询等。