假设我有一个如下所示的记录:
{
"title": "Random title",
"authors": [
{
"first": "Jordan",
"last": "Reiter"
… more fields here …
},
{
"first": "Joe",
"last": "Schmoe"
… more fields here …
},
]
}
我希望用户能够按作者搜索记录,如果他们输入完整的查询 Jordan Reiter,它会提取此记录(以及至少一位作者与这些字段匹配的其他记录。
我不希望用户必须指定第一个/最后一个字段,而且我不一定知道他们是否正在搜索 Jordan Reiter
Reiter Jordan
甚至J Reiter
因此,理想情况下,我希望匹配所有这些情况,同时仍然对其进行过滤,以便例如这些记录都不匹配:
{
"title": "About Jordan Reiter",
"authors": [
{
"first": "Susan",
"last": "Schmusan"
… more fields here …
}
]
}
{
"title": "Completely different authors",
"authors": [
{
"first": "Robert",
"last": "Jordan"
… more fields here …
},
{
"first": "Samuel",
"last": "Reiter"
… more fields here …
},
]
}
刚刚开始使用 ElasticSearch,因此如果我缺少任何基本概念,请告诉我。
我计划让作者字段成为嵌套类型。
最佳答案
第一个和最后一个的多重匹配查询,我猜: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html (也许带有phrase_prefix子句) 包装到嵌套查询中: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html
并且您必须提供一个映射来明确指定您的“作者”是嵌套类型: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html
如果您不将作者映射为嵌套类型,则 ElasticSearch 将在内部创建所有“第一个”值的长列表和所有“最后一个”值的长列表,因此您将无法匹配组合特定的“第一个”和“最后一个”字段。
关于elasticsearch - 在 ElasticSearch 中搜索嵌套对象中的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21783656/