1.剔除数据 ----在搜索时,想将某些结果排除掉,我们可以使用操作符 “-”进行排除查询。即:-field:value。
例:剔除id为123的数据
filterQuery.addFilter("-id:123")
2.SolrServerException: No live SolrServers available to handle this request:[http://192.168.200.8:7788/dxysearch/antibody_
shard1_replica2, http://192.168.200.7:7788/dxysearch/antibody_shard1_replica1]
Caused by: org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: Expected mime type application/octet-stream but got text/html. <html>
解决方案:
3.no field name specified in query and no default specified via 'df' param"
solrconfig.xml中handler里面配置df:
<str name="df">text</str>
4.SOLR搜索时候常会出现以下问题,比如搜索“大鼠” 可以搜索到结果,但是 大和鼠之间加个空格结果就不一样了。
设置默认搜索字段的效果:搜索条件为 title:随意 问,中间的空格默认相当于OR,"text"优先于"name",因此搜索条件等价于 title:随意 OR text:问,所以会搜索不出结果。
建议解决方法:<前三种方法不灵活>
方法1:可以将搜索条件变为 title:(随意 问),等价于 title:随意 OR title:问。
方法 2:搜索条件不变,查询时URL加上df参数"&df=title",也可以解决。
方法3:把
<str name="df">text</str>
改为你要默认的查询字段比如改为name 搜索"茶 油"的时候 及类似鱼 name="茶" or name="油"最终使用的解决方案:使用org.apache.solr.client.solrj.util.ClientUtils类中的escapeQueryChars(String s)方法对字符串转义。
str = ClientUtils.escapeQueryChars(str);
5.solr中fq分开设置,利于缓存。
6.solr的index和query过程忽略大小写时,如果要全词匹配(q中有字母时,大写优先于全词匹配),须将q用""引起来。
-
- 引号引起来之后:
7. solr默认空格将query分成不同的字句,如q=绵羊Thymidylate Synthase多克隆抗体,被solr解析为:
- parsedquery_toString: "+(((((product_name:绵羊 product_name:thymidylate)~2))~0.6 (((product_name:synthase product_name:多克隆 product_name:抗体)~2))~0.6)~2)"
- 这样相似度排序就会出现不理想的结果。当时采用调整mm值来控制()。
- 解决思路:在后端对q作如下处理:判断后在第一个字母(或单词)前空格。
8. schema.xml配置中<uniqueKey>id</uniqueKey>,如果id改为其他配置,offline创建索引时会报以下错误。
2018-02-09 15:04:07,852: ERROR: simpleManager.py: 204: Traceback (most recent call last):
File "/home/zhaob/gitlab/search_offline/src/simpleManager.py", line 201, in importBySql
count = importBySqlExe(sql, core, dbClient_g)
File "/home/zhaob/gitlab/search_offline/src/simpleManager.py", line 126, in importBySqlExe
(addNum, filterNum, errorNum) = solrutils.addRowsToSolr(newRows)
File "/home/zhaob/gitlab/search_offline/src/solrUtils.py", line 276, in addRowsToSolr
self.add(docs)
File "/home/zhaob/gitlab/search_offline/src/solrUtils.py", line 218, in add
self.solrClient.add_many(docs)
File "/home/zhaob/.local/lib/python2.7/site-packages/solr/core.py", line 326, in wrapper
return self._update(content, query)
File "/home/zhaob/.local/lib/python2.7/site-packages/solr/core.py", line 550, in _update
rsp = self._post(selector, request, self.xmlheaders)
File "/home/zhaob/.local/lib/python2.7/site-packages/solr/core.py", line 639, in _post
return check_response_status(self.conn.getresponse())
File "/home/zhaob/.local/lib/python2.7/site-packages/solr/core.py", line 1102, in check_response_status
raise ex
SolrException: HTTP code=400, reason=Bad Request
2018-02-09 15:04:07,852: ERROR: simpleManager.py: 205: <class 'solr.core.SolrException'>
原因:offline中row doc 和sql字段需与solrcloud中的field字段严格对应。
9.solrconfig.xml配置:指定的搜索字段放在qf中。默认搜索字段放在df中。
10.schema.xml中配置的字段如果是string,则默认是全匹配搜索。
11. 搜索结果如果要高亮或者facet等processor,必须返回id。
12. 一个可能的经验法则:查看Solr每秒钟查询的次数。如果每分钟垃圾收集数量超过该值,那么堆可能太小。