3

更准确地说,我将使用示例...

干净的查询是:(type:77 AND (zipCode:12345 OR name:OR))

在 Solr 管理页面上查询时会引发异常:

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

所以在 Solr Admin 页面上,我将查询更改为:

(类型:“77”AND(邮政编码:“12345”或名称:“OR”))

作为一种魅力

现在我在用 solrnet 做同样的事情时遇到了问题。我正在使用 SolrQueryByField 类进行查询。当我与

新 SolrQueryByField("name", "OR")

我得到了 Solrnet.Exceptions.InvalidFieldException 这与 Solr 管理页面一致,但是当我使用

新 SolrQueryByField("name", "\"OR\"")

我得到错误的结果。通过检查网络流量,我发现 http get 请求不同(为简洁起见,仅给出名称字段名称和值):

name%3A%22OR%22 => 来自 Solr 管理页面

名称%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

请尝试在下面的方法中传递包含多个字段名称和搜索文本的字符串数组。它将返回 solrnet 查询以搜索具有 OR 条件的多个文件名。

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 回答