简体   繁体   English

Solrnet:搜索字段值是查询运算符时的问题(eq。或,和)

[英]Solrnet: problem when search field value is query operator (eq. or, and)

To be more precise I will be working with example... 更确切地说,我将以实例为例......

Clean query is: (type:77 AND (zipCode:12345 OR name:OR)) 干净查询是:(类型:77 AND(zipCode:12345或名称:OR))

When querying on Solr Admin page this throws exception: 在Solr Admin页面上查询时,抛出异常:

org.apache.lucene.queryParser.ParseException: Cannot parse... org.apache.lucene.queryParser.ParseException:无法解析...

So on Solr Admin page I changed query to: 所以在Solr Admin页面上我将查询更改为:

(type:"77" AND (zipCode:"12345" OR name:"OR")) (类型:“77”AND(zipCode:“12345”或OR名称:“OR”))

which worked as a charm 这充当了魅力

Now I have a problem to do the same stuff with solrnet. 现在我有一个问题,用solrnet做同样的事情。 I am using SolrQueryByField class for querying. 我正在使用SolrQueryByField类进行查询。 When I am working with 我在工作的时候

new SolrQueryByField("name", "OR") 新的SolrQueryByField(“名称”,“或”)

I get Solrnet.Exceptions.InvalidFieldException which is in accordance with Solr Admin page, but when I am working with 我得到了Solrnet.Exceptions.InvalidFieldException,这与Solr Admin页面一致,但是当我正在使用时

new SolrQueryByField("name", "\\"OR\\"") 新的SolrQueryByField(“name”,“\\”OR \\“”)

I get wrong results. 我的结果错了。 By inspecting network traffic I found out that http get request is different (for brevity only name field name and value are given): 通过检查网络流量,我发现http get请求是不同的(为简洁起见,只给出了名称字段名称和值):

name%3A%22OR%22 => from Solr Admin page 来自Solr Admin页面的名称%3A%22OR%22 =>

name%3a%5c%22OR%5c%22 => from solrnet 名称%3a%5c%22OR%5c%22 =>来自solrnet

My question is: what sholud I do to prevent solrnet from adding %5C (backslash) to query string? 我的问题是:为防止solrnet将%5C(反斜杠)添加到查询字符串,我采取了什么措施?

Thanks in advance 提前致谢

SolrQueryByField produces quoted/escaped values. SolrQueryByField生成带引号/转义值。 If you have some special case where this is not desirable (such as this case) you can use SolrQuery , eg : 如果你有一些特殊情况,这是不可取的(例如这种情况)你可以使用SolrQuery ,例如:

Query.Field("type").Is(77) && (Query.Field("zipCode").Is("12345") || Query.Simple("name:\"OR\""))

Please try to pass the string array that contains multiple field names and search text in the below method. 请尝试在下面的方法中传递包含多个字段名称和搜索文本的字符串数组。 It will return the solrnet query for search with multiple filed name with OR condition. 它将返回带有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;
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM