3

より正確に言うと、私は例を使って作業します...

クリーンクエリは次のとおりです:(type:77 AND(zipCode:12345 OR name:OR))

Solr管理ページでクエリを実行すると、例外がスローされます。

org.apache.lucene.queryParser.ParseException:解析できません...

そのため、Solr管理ページでクエリを次のように変更しました。

(タイプ: "77" AND(zipCode: "12345" OR name: "OR"))

チャームとして働いた

今、私はsolrnetで同じことをするのに問題があります。クエリにSolrQueryByFieldクラスを使用しています。私が一緒に働いているとき

new SolrQueryByField( "name"、 "OR")

Solr管理ページに準拠したSolrnet.Exceptions.InvalidFieldExceptionが発生しますが、

new SolrQueryByField( "name"、 "\" OR \ "")

間違った結果が出ます。ネットワークトラフィックを調べると、http getリクエストが異なることがわかりました(簡潔にするために、名前フィールドの名前と値のみが示されています)。

name%3A%22OR%22=>Solr管理ページから

name%3a%5c%22OR%5c%22=>solrnetから

私の質問は、solrnetがクエリ文字列に%5C(バックスラッシュ)を追加しないようにするために何をすべきかということです。

前もって感謝します

4

2 に答える 2

8

SolrQueryByField引用符で囲まれた/エスケープされた値を生成します。これが望ましくない特別な場合(この場合など)はSolrQuery、次のように使用できます。

Query.Field("type").Is(77) && (Query.Field("zipCode").Is("12345") || Query.Simple("name:\"OR\""))
于 2011-05-18T13:00:15.817 に答える
1

以下のメソッドで、複数のフィールド名と検索テキストを含む文字列配列を渡してみてください。OR条件の複数のファイル名で検索するためのsolrnetクエリを返します。

public ISolrQuery BuildQuery(string[] SearchFields, string SearchText)
    {
        try
        {
            AbstractSolrQuery firstQuery = new SolrQueryByField(SearchFields[0], SearchText) { Quoted = false };

            for (var i = 1; i < parameters.SearchFields.Length; i++)
            {
                firstQuery = firstQuery || new SolrQueryByField(SearchFields[i], SearchText) { Quoted = false };
            }

            return firstQuery;
        }
于 2017-10-11T14:12:56.500 に答える