我正在为一个商业网站开发Solr,使用ASP.NET MVC构建,并使用SolrNet进行集成。
除了追加查询参数的搜索处理程序组件配置外,一切正常。我指的是http://wiki.apache.org/solr/SearchHandler#Configuration
我想要实现的具体事情是使用solr配置文件中的append part添加搜索查询参数。这是从我的solr配置中复制的处理程序配置。
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">1</int>
<str name="field">Name</str>
<str name="spellcheck">on</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.dictionary">default</str>
<str name="spellcheck.dictionary">wordbreak</str>
<str name="spellcheck.maxcollations">5</str>
<str name="spellcheck.count">5</str>
<str name="spellcheck.alternativetermcount">2</str>
<str name="spellcheck.maxresultsforsuggest">5</str>
<str name="spellcheck.maxcollationtries">5</str>
</lst>
<lst name="appends">
<str name="qf">Vendor^1</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
当我从Solr管理界面进行查询时,这似乎工作正常。但是,当我通过SolrNet完成查询时,这不起作用。这是两个查询:
通过Solr Admin完成查询:
http://localhost:8983/solr/mycore/select?q=ABC&defType=edismax&qf=Name^8++ShortDescription^4++FullDescription^3+CategoryCopy^5+ManufacturerCopy^5+Sku^1+ChildSku^1+nGramContent+CustomProperties&spellcheck=true&spellcheck.q=ABC
以上查询给出了我想要的产品的预期结果。
这是从SolrNet完成的查询,它使用相同的参数,但我没有得到我想要的结果。
http://localhost:8983/solr/mycore/select?q={!type%3dedismax+qf%3d%27Name^8++ShortDescription^4++FullDescription^3+CategoryCopy^5+ManufacturerCopy^5+Sku^1+ChildSku^1+nGramContent+CustomProperties%27+bq%3dStockAvailability%3atrue^1}%28ABC%29&start=0&rows=2&fq=Price%3a[0+TO+9999999999999]&spellcheck=true&spellcheck.q=ABC&spellcheck.collate=true
更新 这是我的Solrnet查询:
private static ISolrOperations<MyClass> solr;
SolrQueryResults<MyClass> Results = new SolrQueryResults<MyClass>();
Results = solr.Query(new LocalParams { { "type", "edismax" }, { "qf", "Name^" + nameWeight + " Field1^" + Field1Weight + " Field2^" + Field2Weight " }, { "bq", "InStock:true^"+ flag } });
这不起作用,因为它可能不尊重Solr处理器配置,因为solnd参数是从solr配置完成的。
但为什么以及如何解决这个问题?