0

これらの可能な文字列値をすべて返すクエリを書くのに苦労しています。状況をより困難にするために、|###>###| のセットが複数存在する可能性があります。ブロックは 1 つの文字列に含まれているため、これらの間で OR を使用しても機能しません。

OR 演算子でグループ化を不適切に使用している可能性があります。使用したすべての試行で、「schema3」で一致を開始する必要が生じるためです。

頭の中で描いたのはこんな感じです。

item_s:schema3|(a OR atext OR "")>(a OR atext OR "")|

item_s:schema3|a>|
item_s:schema3|>a|
item_s:schema3|atext>|
item_s:schema3|>atext|
item_s:schema3|atext>a|
item_s:schema3|a>atext|
4

1 に答える 1

0

クエリとインデックス作成に StandardAnalyzer を使用していると仮定しています。その場合、リストしたクエリにいくつかの問題があります。

ここでは、実質的にフレーズ クエリを作成しようとしています。コロンは Lucene によって解釈されているため、"schema3" で始まる検索のみを試行できます。クエリ:

item_s:somestuff

フィールド name で「somestuff」を検索しますitem_s。全体を引用符で囲むと、それが解決するはずです。

次に、フレーズ クエリにロジックやワイルドカードを含めることはできません。指定した用語と正確に一致させるには、次のように 6 つ (または 9 つ) の可能性をすべて列挙する必要があります。

"item_s:schema3|a>|" "item_s:schema3|>a|" "item_s:schema3|a>atext|" etc.

(明確にするために、ORs は Lucene 構文では実際には必要ありません。これはデフォルトの操作であり、私は Lucene の+/-構文を好みますand/or/not)。

用語の正確な正しい順序付けについてそれほど気にせず、Lucene のスコアリング アルゴリズムに頼っても構わないと思っている場合は、生活を少し楽にして、次のようなクエリを実行できます。

+"items_s:schema3" +(a atext)

これには、プレフィックス「items_s:schema3」、および「a」と「atext」のいずれか (または両方) が一致する必要があります。

句読点を含め、同じ正確な形式を維持することが重要な場合は、句読点を維持するキーワードまたは空白文字アナライザーを使用してインデックスを作成する必要があります (もちろん、既に行っている可能性があります)。

于 2013-01-19T00:28:10.857 に答える