假设我有这样的doc格式:
doc #1
A: 1
B: 2
C: 3
doc #2
A: 4
B: 1
C: 8
因此,用户输入将为1.我对A,B和C进行multi_match查询。这样可以正常工作。我想将A视为主要的,所以我给了它一个提升(目前为5)。这很好,A:1的所有文档都升到了顶层。
但是,考虑到上面的两个文档,输入“1”将返回两个文档。我希望搜索工作的方式是使A成为优先级字段,如果我在那里找到值,我想忽略其他两个字段。
如果没有找到A:1,那么我想搜索B& C作为后备。
elasticsearch是否有这种机制?
以下是input = 1
的情况答案 0 :(得分:3)
Elasticsearch不支持此类功能。即使它确实如此,它也不会比你针对A运行第一个查询并且如果它没有从客户端返回针对B和C运行第二个查询的任何内容那么明显更优化。
在elasticsearch中,搜索分布在多个分片中,并且特定分片找不到文档这一事实并不意味着该文档不存在于其他分片中。因此,要在elasticsearch中实现它,我们必须首先执行A的查询,检查它是否没有返回任何内容,然后执行B和C的查询。将此移动到客户端只需在客户端和进程的elasticsearch节点。除此之外,它几乎是一样的。