複数のクエリパーサーの構文について

トピック作成者:ks-solruserml-bot (2024/09/22 22:24 投稿)
6
OpenOpen

(The bot translated the original post https://lists.apache.org/thread/3jvjbgyojl99mjvhn8xfnfoofh0tckds into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは Solr ユーザーの皆さん、

同じクエリ内で複数のクエリパーサーを使用するクエリ構文の例を教えていただけませんか?

私は以下のように試しましたが、edismax を使用して description フィールドを検索し、lucene パーサーを使用して keywords フィールドを検索しようとしましたが、うまくいきませんでした。何が間違っているのでしょうか?

host:port/solr/v9/select?q={!edismax qf=description}white roses OR {!lucene}keywords:(white AND roses)&debug=true

Solr の解析クエリ文字列は以下の通りです:

"parsedquery_toString": "+((description:white roses) (description:OR) (description:{!lucene}keywords:(white) (description:AND) (description:roses)))",

ありがとうございます。
Rajani

返信投稿者:ks-solruserml-bot (2024/09/22 22:24 投稿)

こんにちは Rajani、

これが役に立つかもしれません。おそらく、クエリアイアス置換のようなことをしたいのではないでしょうか?さらに、最初の 'OR' がクエリ全体を lucene クエリパーサーモードに強制してしまうかもしれません。

Hoss のクエリ置換構文に関する説明が、このプレゼンテーションで参考になります :)

Hoss による Lucene/Solr Revolution 2016 のプレゼンテーション
https://home.apache.org/~hossman/rev2016/#/36/3 - スライドショーリンクはページ上部にあります。

よろしく、
Robi

返信投稿者:ks-solruserml-bot (2024/09/22 22:24 投稿)

こんにちは、

確かに、eDismax はいくつかの高度なクエリ操作構文をサポートしています。また、JSON クエリ DSL を使うと、クエリを構造化するのに便利かもしれません。

古いローカルパラメーター構文に関しては、処理すべき部分文字列の終わりを定義するのが難しいです。例えば、文字列の最初にスペースを入れると、dismax は 'white' という単語だけを取得します。

以下のように試してみるのもよいかもしれません:

/select?q.op=OR&q={!edismax qf=description v=$wr} {!lucene df=keywords q.OP=AND v=$wr}&wr=white roses&debug=true

または、後半部分は以下のように書き換えられます:

keywords:(+white +roses)

推奨される構文についてはこちらをご覧ください:
Solr Boolean Operators

よろしく、
Mikhail Khludnev

返信投稿者:ks-solruserml-bot (2024/09/22 22:24 投稿)

{!...} ローカルパラメータ構文を q パラメータの冒頭に使用すると、その文字列全体の解析を指定することになります。そのため、edismax パーサーには以下のように全体の文字列が入力されます。

white roses OR {!lucene}keywords:(white AND roses)

しかし、edismax は埋め込みパーサーをサポートしていません。

クエリ全体が defType=lucene パーサーに渡される場合、そのクエリが SHOULD 条件(edismax で解析される部分と lucene で解析される部分)を含むようにするには、単にグループ化するためだけでなく、クエリ文字列の最初が {!...}defType パーサーを上書きしないように括弧を使用する必要があります。

さらに、edismax のクエリ入力を v パラメータとして指定する必要があります。そうでないと、defType=lucene パーサーがどこで edismax の入力が終了するかを決定することになります。

埋め込み edismax パーサーを使うには、このように書きます:

q=({!edismax qf=description}white roses OR keywords:(white AND roses))

しかし、この場合、whitedefType=lucene パーサーによって edismax パーサーに渡されるクエリ文字列になります。

あなたが求めているのは、おそらく次のようなものです:

q=({!edismax qf=description v='white roses'} OR keywords:(white AND roses))

また、次のようにも分けることができます:

q=({!edismax qf=description v=$user_input} OR keywords:(white AND roses))
user_input=white roses

これにより、ユーザー入力に引用符が含まれる場合などに役立つことがあります。

-Hoss
http://www.lucidworks.com/

返信投稿者:ks-solruserml-bot (2024/09/22 22:25 投稿)

参考までに:もし私の講演が録画された場合、私はそのビデオのリンクを自分のApacheページに追加します。
https://home.apache.org/~hossman/
しかし、通常はスライド自体にはビデオリンクを追加しません。

例えばこの講演では:
https://home.apache.org/~hossman/rev2016/
ビデオはこちらです:
https://youtu.be/qTVi7eMGe1A

-Hoss
http://www.lucidworks.com/

返信投稿者:ks-solruserml-bot (2024/09/22 22:25 投稿)

ありがとう、Hoss!そのリンクが機能していなかったのを忘れていました… ずっと前にスライドをざっと見たことがあるだけでした。

返信投稿者:ks-solruserml-bot (2024/09/22 22:25 投稿)

ありがとうございます、Hoss。スライドとプレゼンテーションは素晴らしいですね。RobiさんとMikhailさんもこの件を調べていただきありがとうございます。

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

KandaSearch

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

投稿の削除

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