1

オプション ("should" 句) の必須トークンと禁止トークンを含むクエリがあります。次の 2 つのクエリは、異なる結果を返します。しかし、同じであるべきではありませんか?

+_query_:"{!type=**dismax** mm='2<2 3<3 5<4 7<51%' qf='normalizedField'} opt1 opt2 +mandatory -prohibited"

VS

+_query_:"{!type=**edismax** mm='2<2 3<3 5<4 7<51%' qf='normalizedField'} opt1 opt2 +mandatory -prohibited"

最小の「すべき」一致パラメーターを使用する場合:

mm: "2<2 3<3 5<4 7<51%"

何か案は?ありがとう

更新さ れたsolrインデックスにドキュメントがあります:

{
   ...
   "normalizedField":"opt1 opt3 mandatory"
   ...
}

dismaxクエリによる検索:

+_query_:"{!type=dismax mm='2<2 3<3 5<4 7<51%' qf='normalizedField'} opt1 opt2 +mandatory -prohibited"

"parsedquery_toString":"+(((normalizedField:opt1) (normalizedField:opt2) +(normalizedField:mandatory) -(normalizedField:prohibited))~2) ()"

空の結果を返します(予想どおり)

しかし

edismaxクエリで検索:

+_query_:"{!type=edismax mm='2<2 3<3 5<4 7<51%' qf='normalizedField'} opt1 opt2 +mandatory -prohibited"

"parsedquery_toString": "+((normalizedField:opt1) (normalizedField:opt2) +(normalizedField:mandatory) -(normalizedField:prohibited))"

この書類を返してください。なぜ?

4

2 に答える 2

2

私は解決策を見つけたようです。既知の問題がある 5.2 solr バージョンを使用しました ( https://issues.apache.org/jira/browse/SOLR-2649 )。バージョン 5.5.1 へのアップグレード後、問題は解決され、edismax は dismax と同じように動作します (私の例では)。

于 2016-06-09T16:08:27.587 に答える
0

edismax と dismax は同一ではありません (その場合、edismax を導入する理由はありません)。edismax は、いくつかの新機能を導入することにより、dismax の構文セットと魔法を拡張します。

  • 完全な Lucene クエリ パーサー構文をサポートします。
  • AND、OR、NOT、-、+ などのクエリをサポートします。
  • Lucene 構文モードでは、"and" と "or" を "AND" と "OR" として扱います。
  • 「魔法のフィールド」名 _val_ および _query_ を尊重します。これらはスキーマの実際のフィールドではありませんが、使用すると特別なことを行うのに役立ちます (_val_ の場合の関数クエリや _query_ の場合のネストされたクエリなど)。_val_ が語句クエリで使用されている場合、値は関数として解析されます。
  • 構文エラーの場合のスマートな部分エスケープが改善されました。フィールド化されたクエリ、+/-、およびフレーズ クエリは、このモードでも引き続きサポートされます。
  • 単語帯状疱疹を使用して近接ブーストを改善します。近接ブースティングが適用される前に、クエリがドキュメント内のすべての単語に一致する必要はありません。
  • 高度なストップワード処理が含まれています。ストップワードはクエリの必須部分では必要ありませんが、近接ブースティング部分では引き続き使用されます。クエリが「to be or not to be」などのすべてのストップワードで構成されている場合は、すべての単語が必要です。
  • 改善されたブースト機能が含まれています: Extended DisMax では、ブースト機能は加数ではなく乗数であり、ブースト結果を改善します。DisMax の追加ブースト機能 (bf および bq) もサポートされています。
  • +foo (-foo) などのクエリは、すべてのドキュメントに一致します。
  • エンド ユーザーが照会できるフィールドを指定し、直接フィールド検索を禁止することができます。

スコアリングに影響を与えやすいものは太字にしましたが、「純粋な否定のネストされたクエリ」などの機能によって、含まれるドキュメントが変わります。完全な lucene クエリ パーサー構文がサポートされているため、同じことが発生する可能性があります。

何が起こっているのかを実際に知る最も簡単な方法はdebugQuery、Solr の機能を使用することです。これにより、スコアと、dismax および edismax クエリが展開されているものを正確に確認できます。

.. dismax が機能する場合は、それを使用できます。

于 2016-06-09T11:05:06.060 に答える