如果单词“mumbai”出现在 Headers 的任何地方,我会返回此查询 .
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {
"title": "mumbai"
}
}
}
}
}
所以结果包含......
mumbai
mumbai ports
financial capital mumbai
我只需要返回“mumbai”术语而不是其他mumbai词与其他短语相关联的文档 . 只有第一个结果是正确的 . 如何丢弃其他结果?
更新
此查询按预期工作,如果匹配准确,则列出排序值58(随机值) .
curl -XPOST "localhost:9200/enwiki_content/page/_search?pretty" -d'
{
"fields": "title",
"query": {
"match": {"title": "Mumbai"}
},
"sort": {
"_script": {
"script": "_source.title == \"Mumbai\" ? \"58\": \"78\";",
"type": "string"
}
}
}'
我需要返回匹配精确孟买的 Headers (因此排序值为58) . 如何过滤或添加脚本到“fields”参数?
2 回答
要让mumbai与仅包含mumbai且没有其他内容的doc匹配,您必须为要搜索的字段存储令牌计数字段 . 此令牌计数字段将包含该字段包含的令牌数 . 使用此字段,您可以在 Headers 字段上匹配mumbai,并将token_count字段与孟买中的令牌数量(即一个)匹配 . 请注意,其他文档中的token_count字段将超过1 .
供参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/token-count.html
注意:如果您使用的是停用词,那么您需要了解与令牌计数相关的其他警告 . 您可以在上面的链接中找到相关信息 .
试试
term
查询 . 它会进行精确匹配搜索术语查询与孟买和孟买不匹配,它将被视为不同的单词
Second Option: 如果您可以更改映射,则可以将
title
字段设置为not_analyzed
Third Option
match
使用分析器选项查询