2016-05-04 20 views
0

私はsolrをエンタープライズアプリケーションに使用しています。これまでのところ、検索にngramフィールドを使用しているので、うまく動作します。部分的な照会(索引付けされたngramとの照合)では正しく機能します。しかし、問題は、正確なクエリの一致を強制する方法です。たとえば、クエリ "Test 1"は、ユーザーが二重引用符で入力したときとまったく同じテキストに一致する必要があります。現在、いくつかのトークナイザとフィルタを使用しているので、二重引用符はフィルタリングされ、クエリには違いがありません。(これは、使用するアナライザチェーンのためですが、ngramsと部分検索で動作する必要があります。Solr検索フィールドのベストプラクティス

現在、私はngramクエリフィールドを検索しています。正確なクエリの一致を実行するには、どうすればよいですか?ベストプラクティスは何ですか?私が考えているのは、クライアント側から二重引用符を識別し、クエリフィールドを元のフィールドに変更することです(ngramsを使用しないで)。しかし、私が持っている問題は一般的なものであり、solrは完全なエンタープライズレベルの検索エンジンなので、これを行う良い方法があるはずです。

答えて

0

もう1つはfield、それにはfieldTypeとしてstringを追加して同じインデックスを付けることができます。

完全一致を実行する場合は、上記のフィールドで照会することができます。

部分検索を実行したい場合は、ngramでインデックス付けされた以前のフィールドにクエリを実行できます。

OR ..これは別の方法で試すことができます。

ngramを使用して現在のフィールドタイプを定義しました。そこではインデックス作成中にngramトークナイザを定義することができ、クエリに対してはkeywordTokenizerと小文字のフィルタファクトリについてのみ言及します。

テキストの索引付けはトークン化されますが、問合せを実行する間はトークン化されません。

+0

つまり、私はクライアント側から二重引用符を義認し、それに応じてクエリフィールドを変更する必要がありますか?私はこれについて考えましたが、solrがすでに解決している可能性のある一般的な問題ではありませんか?私は車輪を再発明するかもしれないと思っていた – wattale

+0

@ワタール:答えを確認してくださいもう一つのオプションを追加しました... –

+0

しかし、質問は、ユーザーが故意に二重引用符でクエリを入力するとどのように処理できますか?あなたのアプローチでは、インデックスを正規化して両方を照会するメカニズムを使用する必要があります。二重引用符の意味はありません。大文字と小文字を区別するフィールドも一致する必要がありますedisax parserのpfフィールドを見つけました。私はそれを見ています:) – wattale

関連する問題