2016-07-07 14 views
0

私は検索インデックスを持っており、指定されたフィールドを条件付きで検索するluceneクエリが必要です。最終的な結果は、Webサイトにログインしている場合はすべてのフィールドが検索されるか、またはログアウトしている場合は、指定されたフィールドはluceneクエリを変更することによってスキップされます。Lucene - 検索対象から除外するフィールド

現時点で私が持っている最も近いです:

+(term1~ term2~) +_culture:([en-gb TO en-gb] [invariantifieldivaluei TO invariantifieldivaluei]) **-FieldToIgnore1:(term1 term2) -FieldToIgnore2:(term1 term2)** 

検索語のいずれかが(FieldToIgnore1またはFieldToIgnore2)を言及していない分野の一つに存在する場合これに伴う問題は、しかし、その後、文書はされています無視するフィールドの1つが一致したため除外されているため無視されます。

luceneが無視するフィールドと一致しないように、これをどのように変更できますか?

+0

私は理解できません。一般に、フィールドを無視するのは簡単です。あなたはそのフィールドで*検索しません。あなたは 'MultiFieldQueryParser'か何かを使っていますか?または、デフォルトの検索フィールドは何らかの種類のキャッチオールフィールドですか?または何? – femtoRgon

+0

謝罪 - 私はLuceneの用語に慣れていませんが、キャッチオールフィールドオプションだと思います。この機能は[Lucent query parser syntax](http://lucene.apache)を使用する[Kentico CMSのスマート検索](https://docs.kentico.com/display/K9/Smart+search+syntax)で構築されています。 .org/core/3_0_3/queryparsersyntax.html)それが役立つかどうか? – ajbrun

+0

その場合、一致するフィールドがどのフィールドから来ているのかを判断する方法がない可能性があります。その "すべての"フィールドは単なる言葉の大きな袋になるだろう。必要なフィールドのみを検索するためにクエリを書く必要があります(または、検索したいフィールドだけを組み合わせた別の検索フィールドをインデックスするかもしれません)。しかし、私はKenticoについて何も知らないので、あなたの索引などのチューニングをサポートしているかどうかはわかりません。 – femtoRgon

答えて

0

LuceneとSmart Search Resultsウェブパーツを使用して検索を限定するのではなく、ドキュメントフィールド自体の検索可能性を変更しようとしましたか?ページ・タイプまたは索引自体に検索パラメータを設定できます。

[ページの種類] - > [あなたのドキュメントの種類] - >検索フィールドで、検索対象のフィールドと検索対象外のフィールドを設定します。

Page Types --> Articles --> Search fields (v.8.2)

バージョン9を使用すると、スマート検索アプリでこれらの設定を提供します。詳細はthese docsを参照してください。

+0

ありがとうEmma、私はこれを考えましたが、無視するフィールドの検索可能性を無効にすると、ログインしてすべてを検索する要件の条件的な側面には合いません。私はおそらく私の唯一の選択肢は、これらのフィールドを除外するカスタム検索インデックスを作成することだと思う - 私はちょうどルーネンによって処理することができるより単純なオプションがあることを望んでいた... – ajbrun

+0

Luceneがまだjankyあなたのような条件を入力すると運があります)、検索範囲は一般ユーザーと認証ユーザーに基づいて異なります。次に、2つの検索(または検索結果)Webパーツに入れます。表示するロールを「ロールに表示:_notauthenticated_」に設定し、もう1つを「ロールに表示:_authenticated_」に設定します。 – emmaclairez

+0

ログオンしたユーザーのWebパーツが検索インデックスのすべてのフィールドにヒットする可能性があります。 Luceneの '-term'でこれらのフィールドでブロックされます – emmaclairez

関連する問題