我有一个为Elasticsearch(1.7.3)构建的大人物索引
我试图搜索人员信息(数千万)。人的性别(即' M' F')是人员文档中的众多字段之一。
当我使用匹配查询进行搜索时,需要多长时间(我猜测它必须整理大量的帖子列表?)因为可能至少有一百万个性别。这是一个有效的观察吗?
我正在进行匹配查询,因为我想得分。
.intel_syntax noprefix
.text
.globl main
main:
mov ecx, 3000
mov edx, offset result
llp:
mov al,[edx]
push eax
mov eax, offset message
push eax
call printf
add esp, 8
inc edx
loop llp
mov eax, 0
ret
.data
message :
.asciz " Wynik: %i\n"
据我所知,过滤器非常快,更适合这种情况(也可以缓存)。有什么方法可以将它包装在一个过滤器中并说它是否匹配然后给它一个10的固定分数(例如)?
或者我可以坚持使用匹配查询并在内部进行探索吗?任何帮助/指针都将非常感激。
答案 0 :(得分:0)
您可能需要查看function score
此外,我觉得您应该将gender
字段映射为not_analyzed
,然后您的查询会看起来像这样
GET your_index/your_type/_search
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"filter": {
"term": {
"Gender": "F"
}
},
"weight": 10
}
],
"score_mode": "multiply"
}
}
}
这将是boost
个性别为F
这有帮助吗?