4

FieldQueryオブジェクトを使用してSitecore.Ecommerce.Search.Queryを作成しています。次に、LuceneQueryBuilderクラスを使用してSitecoreクエリをLucene.Net.Search.Queryに変換しています。空の文字列で一致させようとしているフィールドを除いて、クエリのすべてが正常に機能します。

だから...これはうまくいく:

new FieldQuery(FieldName, "1", MatchVariant.NotEquals)

しかし、これはしません:

new FieldQuery(FieldName, string.Empty, MatchVariant.NotEquals)

Sitecore.EcommerceアセンブリとLucene.Netアセンブリの両方を反映しましたが、明らかな問題は見つかりませんでした。しかし、Luceneクエリで作成および使用される用語を見ると、次のようになります。

-フィールド名:

これは間違っていると思います...しかし、おそらくそれは正しく、正しいフィールドインデックスが設定されていません...正直であるかどうかはわかりません。

どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

6

Luceneは、null/空の値の検索を実際にはサポートしていません。結局のところ、それが見つけるために索引付けされたものは何もありません。Luceneは転置インデックスを使用します。これにより、純粋な否定クエリやnullの検索など、特定の種類のクエリが困難または不可能になります。

特定のフィールドがnullであるドキュメントを検索する必要がある場合は、検索可能なフィールドにデフォルト値(たとえば、「NULL」)を格納する必要があります。

そうは言っても、あなたは作成することができます

new RangeQuery(FieldName, null, null, true, true);

これは、上限と下限が開いた範囲クエリを作成するため、値を持つものすべてに一致します。

それを行うのに良い方法ではありませんが、どちらも否定だけでクエリを実行することはできません。

于 2012-12-13T22:55:22.993 に答える