10

ここで説明したのと基本的に同じ問題があります: Solr wildcard query with whitespaceですが、この質問には回答がありませんでした。

「ブランド」というフィールドのフィルタ クエリでワイルドカードを使用しています。

ブランド名に空白が含まれていると困ります。たとえば、ブランド「Lexington」のフィルタリングは、fq={!tag=brand}brand:Lexing*n と言うと問題なく機能します。ただし、「Athentic Models」のような複数の単語からなるブランドは問題を引き起こします。名前の前後に二重引用符を含める必要があるようです。

"s がある場合、*s は何もしません。つまり、brand:"Athentic Mode*" または brand:"Lexingt*" は、何にも一致しません。二重引用符がなければ、brand:Authen* と指定しても機能します。引用符なし、スペースなし、それは Authentic Models と一致します. しかし、空白がブランド名に含まれると、一致するときに最初のスペースまでの文字列のみが考慮されるようです.

ブランドフィールドのタイプは

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>

私の理解では、これはトークン化された空白ではありません。ただし、空白のトークン化されたフィールドから copyField が取り込まれます。

Solr が二重引用符を使用せずにフィルター クエリをトークン化するのを止めるためにできることはありますか?

4

3 に答える 3

14

ロブが彼の答えで言ったように、私は彼がリンクした質問に自分で答えを投稿しました。

必要なのは、クエリ内のスペースをエスケープすることだけです ( customer_name:Pop *Tart-->のようにcustomer_name:Pop\ *Tart)。私の経験から、この方法は、ワイルドカードをどこに配置しても機能します。これは、Solr が次のように主張する方法によって裏付けられています。

customer_name:Pop\ *Tart

次のように解析されます。

customer_name:Pop *Tart
于 2013-01-20T16:12:11.647 に答える
1

タイプを文字列からテキストなどに変更してみてください。文字列型はトークン化されていないため、文字列フィールドに空白がある場合、フィールド内の空白を含め、クエリと一致しようとします。

デフォルトのスキーマ ファイルでは、文字列フィールド タイプのすぐ上にこの行が表示されます。

<!-- The StrField type is not analyzed, but indexed/stored verbatim. -->

text_general などのテキストタイプを使用すると、問題が解決するはずです。

于 2012-09-12T01:37:28.657 に答える
0

元の質問Solr wildcard query with whitespaceに可能な解決策を追加しました

これは末尾のワイルドカードでのみ機能することに注意してください。この質問の例では、文字列内でワイルドカードが使用されていることは知っていますが、これは質問の特定のケースに答えるのに役立ちます。

基本的には、FieldQParserPluginクエリ パーサーを使用することになります。詳細については、元の質問に関する私の投稿を確認してください。

于 2013-01-12T23:37:51.010 に答える