構造が複雑なフィールドに対するクエリーの際の重み付けに関して


(RJoshima) #1

現在、elasticsearch-py(5.3.0)のライブラリを使って、 Elasticsearchのクエリーの際、フィールドに対して重みづけを行おうとしています。 以下のようなjsonがあり、spec_detailsのメーカーと紐づいたdataを取り出し、重みを^10にしたい時、 simple_query_stringのspec_detailsのところはなんと書けば良いでしょうか。 そもそもこういった形式の情報は重みづけなどに対応していないのでしょうか。 いくつかクエリーを書いたり( "spec_details[0][‘data’]^10のような)、 ネットで情報を検索したりしましたが、一向に解決策は出てきま せん。よろしくお願い致します。

`"_source": { “details”: “商品の詳細情報が入ります”, "product": “商品名が入ります”, "created": "2017-06-14 12:35:21", "spec_details”: [ { "field": "メーカー", "data": “sony” }, { "field": "型番", "data": “aaa-bbb } ] }” "simple_query_string": { "query": data["product_name"], "fields": ["product^5", "details", "spec_details[0][‘data’]^10?????(ここをなんと書けば良いか)”], "default_operator": "and" }


(Jun Ohtani) #2

この辺りが参考になるでしょうか?
pythonのではないですが。
https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-objects.html

_sourceが実際のデータだと仮定した時、Elasticsearchはspec_details.dataというフィールドを持っていますが、順序はデータとしては持っていません。
もし、メーカーと型番を別のフィールドとして扱いたいのであれば、spec_details.makeやspec_details.typeなど別のフィールド名にしたほうがいいかと。


(RJoshima) #3

ご回答、ありがとうございます!
まさにおっしゃる通りでした。
結果dataの全フィールドに対して重みづけをすることができました。
メーカーと型番を別のフィールドにするかは今後考えていきたいと思います。
貴重なご意見ありがとうございました。


(system) #4

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.