更确切地说,我将使用示例......
干净查询是:(类型:77 AND(zipCode:12345或名称:OR))
在Solr Admin页面上查询时,抛出异常:
org.apache.lucene.queryParser.ParseException:无法解析......
因此,在Solr Admin页面上,我将查询更改为:
(类型:“77”AND(zipCode:“12345”或OR名称:“OR”))
作为魅力
现在我有问题用solrnet做同样的事情。我正在使用SolrQueryByField类进行查询。当我使用
时new SolrQueryByField(“name”,“OR”)
我得到了Solrnet.Exceptions.InvalidFieldException,这与Solr Admin页面一致,但是当我使用
时new SolrQueryByField(“name”,“\”OR \“”)
我得错了结果。通过检查网络流量,我发现http get请求是不同的(为简洁起见,只给出了名称字段名称和值):
名称%3A%22OR%22 =>来自Solr管理员页面
名称%3a%5c%22OR%5c%22 =>来自solrnet
我的问题是:为了防止solrnet将%5C(反斜杠)添加到查询字符串,我采取了什么措施?
提前致谢
答案 0 :(得分:8)
SolrQueryByField
生成引用/转义值。如果您有一些特殊情况,这是不可取的(例如本案例),您可以使用SolrQuery
,例如:
Query.Field("type").Is(77) && (Query.Field("zipCode").Is("12345") || Query.Simple("name:\"OR\""))
答案 1 :(得分: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;
}