如果单词“mumbai”出现在标题的任何位置,我会返回此查询。
{
"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"
}
}
}'
我需要返回匹配精确孟买的标题(因此排序值为58)。如何过滤或添加脚本到“fields”参数?
答案 0 :(得分:1)
尝试term
查询。它会进行完全匹配搜索
{
"query": {
"bool": {
"must": [
{
"term": {
"title": "mumbai"
}
}
]
}
}
}
术语查询与孟买和孟买不匹配,它将被视为不同的单词
第二个选项:
如果您可以更改映射,则可以将title
字段设置为not_analyzed
第三个选项
带分析器选项的 match
查询
{
"query": {
"match": {
"title": {
"query": "mumbai",
"analyzer": "keyword"
}
}
}
}
答案 1 :(得分:1)
要让mumbai与仅包含mumbai的doc匹配,而不是其他任何东西,你必须为你正在搜索的字段存储一个令牌计数字段。 此令牌计数字段将包含该字段包含的令牌数。使用此字段,您可以在标题字段上匹配mumbai,并将token_count字段与孟买中的令牌数量(即一个)匹配。 请注意,其他文档中的token_count字段将超过1。
供参考: https://www.elastic.co/guide/en/elasticsearch/reference/current/token-count.html
注意:如果您使用的是停用词,那么您需要了解与令牌计数相关的其他警告。您可以在上面的链接中找到相关信息。