【问题标题】:Solrnet: problem when search field value is query operator (eq. or, and)Solrnet:搜索字段值是查询运算符(eq. or, and)时的问题
【发布时间】:2011-05-18 09:05:40
【问题描述】:

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

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

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

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

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

(type:"77" AND (zipCode:"12345" OR name:"OR"))

这是一种魅力

现在我在用 solrnet 做同样的事情时遇到了问题。我正在使用 SolrQueryByField 类进行查询。当我和他一起工作时

new SolrQueryByField("name", "OR")

我得到 Solrnet.Exceptions.InvalidFieldException 符合 Solr 管理页面,但是当我使用时

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

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

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

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

我的问题是:我应该怎么做才能防止 solrnet 在查询字符串中添加 %5C(反斜杠)?

提前致谢

【问题讨论】:

    标签: c# solrnet


    【解决方案1】:

    SolrQueryByField 产生引用/转义值。如果您有一些不希望出现的特殊情况(例如这种情况),您可以使用SolrQuery,例如:

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

    【讨论】:

    • 我想这样做,但我没有“15 名声望”来投票 :( 我接受了答案。再次感谢您
    【解决方案2】:

    请尝试在下面的方法中传递包含多个字段名称和搜索文本的字符串数组。它将返回 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;
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多