私の製品がいくつかに記載されており、次の構造が使用されている状況があります。
{
"defaultDescription" : "Default Description",
"i18nDescription" : {
"pt" : "Descrição Padrão",
"de" : "Standard-Beschreibung"
}
}
ここで、次の要件があります: 優先順位付けされた言語 (3 言語) のリストに従って検索を実行します。最初の言語が にないi18nDescription
場合は 2 番目の言語のみを使用し、2 番目の言語がない場合は 3 番目の言語のみを使用します。それ以外の場合は と一致しdefaultDescription
ます。
私の解決策は次のようになります。
// suppose request comes with the following languages: en, de, pt
{
"size":10,
"fields" : ["defaultDescription", "i18nDescription.en^50", "i18nDescription.de^20", "i18nDescription.pt^10"],
"query": {
"multi_match" : { "query" : "default", "fields" : ["description","descriptions.fr-CA"] }
}
}
しかし、この解決策は優先言語で結果をソートするだけです。私は次のようなことをしたいと思います:i18nDescription.en:search OR (i18nDescription.de:search AND _empty_:i18nDescription.en) OR (i18nDescription.pt:search AND _empty_:i18nDescription.en AND _empty_:i18nDescription.de) OR (description:search AND _empty_:i18nDescription.pt AND _empty_:i18nDescription.en AND _empty_:i18nDescription.de)
これが ElasticSearch クエリであることを表す方法はありますか?