[解決済み】elasticsearchのboolクエリはORで結合する必要があります。
質問
現在、solrベースのアプリケーションをelasticsearchに移行しようとしています。
次のようなluceneクエリがあります。
((
name:(+foo +bar)
OR info:(+foo +bar)
)) AND state:(1) AND (has_image:(0) OR has_image:(1)^100)
私が理解する限り、これはMUST句とブーリアンORを組み合わせたものである。
"(名前にfoo AND bar)または(情報にfoo AND bar)を含むすべてのドキュメントを取得します。その後、state=1という条件で絞り込み、画像を持つドキュメントをブーストする(")。
MUSTでboolクエリを使おうとしていますが、must句にboolan ORを入れるのに失敗しています。以下は、私が持っているものです。
GET /test/object/_search
{
"from": 0,
"size": 20,
"sort": {
"_score": "desc"
},
"query": {
"bool": {
"must": [
{
"match": {
"name": "foo"
}
},
{
"match": {
"name": "bar"
}
}
],
"must_not": [],
"should": [
{
"match": {
"has_image": {
"query": 1,
"boost": 100
}
}
}
]
}
}
}
見ての通り、"info" の MUST 条件が抜けています。
どなたか解決策をお持ちの方はいらっしゃいますか?
本当にありがとうございました。
** UPDATE **
elasticsearchのクエリを更新し、その関数スコアを取り除きました。私の基本的な問題はまだ存在しています。
どうすればいいですか?
私は最終的に私が持っていたかったものを正確に行うクエリを作成することができました。
フィルタリングされたネストされたブール型クエリです。 なぜこれが文書化されていないのか、よくわかりません。多分、ここの誰かが私に教えてくれますか?
以下はそのクエリです。
GET /test/object/_search
{
"from": 0,
"size": 20,
"sort": {
"_score": "desc"
},
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"state": 1
}
}
]
}
},
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"match": {
"name": "foo"
}
},
{
"match": {
"name": "bar"
}
}
],
"should": [
{
"match": {
"has_image": {
"query": 1,
"boost": 100
}
}
}
]
}
},
{
"bool": {
"must": [
{
"match": {
"info": "foo"
}
},
{
"match": {
"info": "bar"
}
}
],
"should": [
{
"match": {
"has_image": {
"query": 1,
"boost": 100
}
}
}
]
}
}
],
"minimum_should_match": 1
}
}
}
}
}
擬似SQLで
SELECT * FROM /test/object
WHERE
((name=foo AND name=bar) OR (info=foo AND info=bar))
AND state=1
name=foo が内部的にどのように扱われるかは、ドキュメントフィールドの解析とマッピングに依存することに留意してください。これは曖昧な動作から厳密な動作まで様々です。
"minimum_should_match"。1は、should文の少なくとも1つが真でなければならないことを示します。
このステートメントは、結果セットの中に has_image:1 を含むドキュメントがある場合、それが100倍になることを意味します。これは結果の順序を変更します。
"should": [
{
"match": {
"has_image": {
"query": 1,
"boost": 100
}
}
}
]
みんな楽しんでね :)
関連
-
[解決済み] ElasticsearchとCassandraの比較 vs ElasticsearchとCassandraの比較
-
[解決済み] ElasticsearchでRead timed outを修正する方法
-
[解決済み] ElasticSearchとマルチフィルター
-
[解決済み] Elasticsearchクエリ - @timestampと別のフィールドで並べ替え?
-
[解決済み] ElasticSearchのキーワードフィールドの「Fielddata is disabled on text fields by default」を修正する方法
-
[解決済み] LogstashでElasticsearchの出力テンプレートを設定する方法
-
[解決済み] 全レコードを返すElasticsearchクエリ
-
[解決済み】Elasticsearchエラー:cluster_block_exception [FORBIDDEN/12/index read-only / allow delete (api)], flood stage disk watermark exceeded.
-
[解決済み】ElasticsearchのMUSTとSHOULDの違い boolクエリ
-
[解決済み】Elasticsearchの集計結果/バケットを10個だけでなく全て表示する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ElasticsearchでRead timed outを修正する方法
-
[解決済み] Elasticsearchは、複数のドキュメントを含むトランザクションをサポートする方法
-
[解決済み] ElasticSearchとマルチフィルター
-
[解決済み] ElasticSearch - 一意な値を返す
-
[解決済み] Elasticsearchクエリ - @timestampと別のフィールドで並べ替え?
-
[解決済み] ElasticSearchの日付範囲
-
[解決済み] Elasticsearchにおけるハイライト
-
[解決済み] ElasticSearchのキーワードフィールドの「Fielddata is disabled on text fields by default」を修正する方法
-
[解決済み] elasticsearchで本当にデータを再インデックス化する方法
-
[解決済み] LogstashでElasticsearchの出力テンプレートを設定する方法