我对弹性搜索中的Bool Query与Finding Exact Values感到有点困惑。具体来说,我有一个 title_field 和一个我要搜索的 post_field 。但是我使用的所有其他字段都是因为我想查询它们是否存在或者存在多少次(例如网址或用户名必须是准确的)。
所以我可以从文档中看到我可以在 title_field 和 post_field 上做multimatch query。
但是我想要其他领域的确切回应呢?我做boolean query(必须使用)吗?或者我是否需要将所有这些字段重新映射为not_analyzed?或者我是否需要将它们映射为not_anayzed first 和然后执行布尔查询?
答案 0 :(得分:0)
实际上,您应该将要进行精确匹配的字段映射为not_analyzed,这意味着它们被视为单个标记而不是分成几个标记。
然后,您应该使用术语查询或过滤器来与令牌完全匹配。如果您使用的是过滤器,则可以使用and,或者不使用过滤器(比bool更方便)。
由于映射所有字段有点单调乏味,您可以使用dynamic_mapping将所有字符串字段映射为not_analyzed,然后只需为要分析的字段添加映射:
"dynamic_templates": [
{
"non_analyzed_string": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"index": "not_analyzed"
}
}
}
]