だから私の問題は基本的に説明されたものと同じ here ですが、それでもグループでは未解決のままです。
私のマッピング:
{
"abstract": {
"properties": {
"summary": {
"type": "string"
}
}
},
"authors": {
"type": "nested",
"properties": {
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
}
}
}
}
そして、これらのフィールドの両方で全文検索を実行したいと思います。私の頭に浮かぶクエリは、残念ながら機能しませんが、次のようになります。
{
"query": {
"bool": {
"should": [{
"multi_match": {
"query": "higgs boson",
"fields": ["abstract.summary^5", "author.last_name^2"]
}
}]
}
}
}
ネストされたマッピングのため、authorsフィールドから結果が得られません。また、ネストされたプロパティを削除することはできません-集計に使用します。それを解決するためのエレガントなアイデアはありますか?
マッピングをinclude_in_root: true
を使用する次のマッピングに変更すると、元のクエリを使用できるようになります。
{
"abstract": {
"properties": {
"summary": {
"type": "string"
}
}
},
"authors": {
"type": "nested",
"include_in_root": true,
"properties": {
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
}
}
}
}
ネストされたフィールドとフラット化されたオブジェクトフィールドの両方として、内部オブジェクトにインデックスを付けることができます。これは、include_in_parentをtrueに設定することで実現できます。 - リンク
注:include_in_root
はelasticsearchの将来のバージョンではcopy_to
を優先して廃止される可能性があります。
私がうまく管理できた唯一の解決策は、便利でもエレガントでもありませんが、どういうわけか機能しますが、次のようなクエリです。
"query": {
"bool": {
"should": [
{
"nested": {
"path": "authors",
"query": {
"multi_match": {
"query": "higgs",
"fields": ["last_name^2"]
}
}
}
},
{
"multi_match": {
"query": "higgs",
"fields": ["abstract.summary^5"]
}
}
]
}
}
別のクエリで設定されている場合、ブースティングが期待どおりに機能するかどうかもわかりません。どんな提案も歓迎します。