フィールドのないレコードの検索について

トピック作成者:Solr初心者 (2024/06/20 18:48 投稿)
4
OpenOpen

Solr初心者です。初めて投稿させていただきます。

コレクションにデータを登録した後、フィールドのないレコードがあることに気づきました。フィールドの値が""(空値)なのではなく、フィールドそのものが存在しないレコードです。例えば、fieldA、fieldB、fieldCという3つのフィールドを含むレコードの場合、以下のid=1のようなfieldBが""(空値)のレコードではなく、id=2のようなfieldBそのものがないレコードが登録されている状況です。

[
  {
    "id" : "1",
    "fieldA" : "foo1",
    "fieldB" : "",
    "fieldC" : "bar1",
  }
,
  {
    "id" : "2",
    "fieldA" : "foo2",
    "fieldC" : "bar2",
  }
]

fieldBのないid=2のようなレコードを検索したいのですが、その方法が分かりません。もしかしてフィールド自体が無いレコードは検索できないのでしょうか。基本的なことかと思いますが、どうかご教示賜りますようお願い申し上げます。

何卒よろしくお願い致します。

返信投稿者:ウフク (2024/06/21 12:03 投稿)

こんにちは、

新しいフォーラムへようこそ、そして質問を投稿していただきありがとうございます!

フィールドの存在を検索する方法を以下に示します:

q=fieldB:[* TO *]

[* TO *] の構文は通常、範囲検索に使用されます。例えば、50から100の間の値を検索するときには [50 TO 100] を使用しますが、文字列でも使用できます。[* TO *] は "フィールドが存在する" という意味です。

この条件を q に追加すると、ドキュメントのスコアに影響を与える可能性があります。スコアを気にする場合は、代わりにフィルタクエリに入れることができます:

q=*:*
fq=fieldB:[* TO *]

フィールドを持たないドキュメントを検索したい場合、クエリを否定することができます:

q=*:* AND -fieldB_s:[* TO *]

または

q=*:* AND NOT fieldB_s:[* TO *]

フィルタクエリを使用して:

q=*:*
fq=*:* AND NOT fieldB_s:[* TO *]

これであなたの質問が解決することを願っています。解決しない場合は、遠慮なく再度投稿してください。

ありがとうございました!

返信投稿者:Solr初心者 (2024/06/21 14:09 投稿)

ウフク様

ご回答いただき、誠にありがとうございます。

これであなたの質問が解決することを願っています。解決しない場合は、遠慮なく再度投稿してください。

フィールドを持たないドキュメントを検索するのに、範囲検索と否定を組み合わせる方法は目から鱗でございました。
試してみたところ、うまくいきました。

なお、スコアに関してはまだまだこれからという感じでございますので、もしわからないことが出てまいりましたら、またご教示賜りますようお願い申し上げます。

どうもありがとうございました。

返信投稿者:ウフク (2024/06/21 19:30 投稿)

なお、スコアに関してはまだまだこれからという感じでございますので、もしわからないことが出てまいりましたら、またご教示賜りますようお願い申し上げます。

お手伝いできてうれしいです。

Solrの「スコア」は、ドキュメントがあなたの基準 q にどれだけよく一致するかを示します。デフォルトでは、ドキュメントはスコアの降順で返されるため、最も一致するものが結果リストの上に表示されます。

これは、q の部分に追加するものすべてが返されるドキュメントのスコアに影響を与えることを意味します。ある基準によってドキュメントのスコアに影響を与えたくないが、それでもその基準でフィルタリングしたい場合は、「フィルタクエリ」 fq を使用し、そこに基準を入れることができます。しかし、これは常に必要ではありません。なぜなら、私たちはスコアに影響を与えることをそれほど気にしないことがあるからです。

これが役立つことを願っています。

返信投稿者:Solr初心者 (2024/06/24 09:05 投稿)

ウフク様
この度は色々とご丁寧にご対応いただき、誠にありがとうございました。心より感謝申し上げます。

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?