假设我的记录如下:
{
"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,所以如果有一个基本的概念,我就错过了让我知道。
我打算让authors字段成为嵌套类型。
答案 0 :(得分:2)
第一个和最后一个多匹配查询,我想: 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
您必须提供一个映射,明确指定您的“authors”是嵌套类型: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html
如果您没有将作者映射为嵌套类型,那么ElasticSearch将在内部创建所有“first”的长列表以及所有“last”值的长列表,因此您将无法匹配组合特定的“第一”和“最后”字段。