1

ファセット検索用のSOLRクエリを作成していますが、フィールドに引用符やその他の不正な文字が含まれている可能性があるため、raw演算子を使用してクエリを作成しています。ただし、ユーザーが複数のファセット値を選択した場合、クエリでORを使用する方法がわかりません。

たとえば、Nikeのメーカーの結果は次のように返されます。

{!raw f=Manufacturer}Nike

以下は、アディダスのメーカーのみの結果を返します。

{!raw f=Manufacturer}Nike OR {!raw f=Manufacturer}Adidas

そして、以下は結果を返しません:

{!raw f=Manufacturer}Nike OR Adidas

これを行う方法はありますか?

4

1 に答える 1

2

raw演算子を使用する代わりに、特殊文字をエスケープすることを検討しましたか? http://lucene.apache.org/java/2_4_0/queryparsersyntax.html#Escaping%20Special%20Characters

エスケープの実装は非常に簡単であり、OR演算子は期待どおりに機能するはずです。PHPで特殊文字をエスケープする方法の例を次に示します。

static public function escapeSolrValue($string)
{
    $match = array('\\', '+', '-', '&', '|', '!', '(', ')', '{', '}', '[', ']', '^', '~', '*', '?', ':', '"', ';', ' ');
    $replace = array('\\\\', '\\+', '\\-', '\\&', '\\|', '\\!', '\\(', '\\)', '\\{', '\\}', '\\[', '\\]', '\\^', '\\~', '\\*', '\\?', '\\:', '\\"', '\\;', '\\ ');
    $string = str_replace($match, $replace, $string);

    return $string;
}

ソース:http ://e-mats.org/2010/01/escaping-characters-in-a-solr-query-solr-url/

于 2011-04-12T17:07:02.080 に答える