solr 常見的問題整理 -費元星

本文是我在開發過程當中遇到的一些問題的整理,有些摘自網上別人的方法。html

1. org.apache.solr.client.solrj.SolrServerException: Timeout occured while waiting response from server at: http://localhost/solr請求超時

    解決方法:設置setConnectionTimeout和setSoTimeout爲1分鐘apache

2. org.apache.solr.common.SolrException: undefined field text

    解決方法: 設置solrConfig.xml <str name="df">id</str> 默認是text性能

 

3. org.apache.solr.common.SolrException: Invalid Date String時間格式化問題

    主要是Solr使用的是標準的格林威治(GMT)時間 這種(yyyy-MM-dd'T'HH:mm:ss.SSS'Z')北京在東八區 默認時間會-8小時測試

因此爲了知足他這個減8 個人作法是在建立索引格式化日期類型的時候 判斷下 把它時間+8 。ui

因此從新建立一個SolrEntityBinder類 此類是徹底copy的DocumentObjectBinder. 只修改了一處。url

修改了類中toSolrInputDocument方法spa

 

 

[html]  view plain ?
  1. <span style="color:#3333ff;"> //判斷是不是日期-------------///  
  2.  if(field.type==Date.class){  
  3.     Date d = (Date)field.get(obj);  
  4.     Calendar cal = Calendar.getInstance();  
  5.     cal.setTimeInMillis(d.getTime());  
  6.     cal.add(Calendar.HOUR, 8);  
  7.     d = cal.getTime();  
  8.     doc.setField(field.name,d,1.0f);  
  9.  }else{  
  10.   doc.setField(field.name, field.get(obj), 1.0f);  
  11. }</span>  

4.Solr查詢字符串空值

    有時候須要查詢某個字段爲空的記錄,好比當solr作facet時,某個域爲空的記錄被統計,故也會被查詢。
一個例子是職位記錄,其中某種緣由公司可能爲空。這時咱們若是想查詢公司名稱爲空的記錄能夠採用以下語法實現(彷佛目前爲止只有此方法可行):
-company:[* TO *]  這樣你會看到結果集中的記錄將含有全部公司名稱爲空的記錄。.net

 

5.Solr競價排名功能

    假如你有3個doc想讓它們有競價排名,那就配這3個solr會把這3個放前面,而後是按照默認排序的其餘doc 。
參考wiki:http://wiki.apache.org/solr/QueryElevationComponent

6.Solr DisMax 分析

        要用dismax,就必須啓用,在solr1.3之後,solr的dismax功能經過 DisMaxQParserPlugin 來解析了。
我測試的版本是3.3,是經過在查詢url裏添加defType=dismax來啓用dismax功能的。經過qt=dismax的話不會起做用的。
經過 defType=dismax 時,Solr 的QueryComponent組件的prepare的方法會取到defType參數的值,去建立對應的quey解析器。

7.Solr 跨核檢索

    你在查詢的條件裏面加上shards=localhost:9095/solr/core0,localhost:9095/solr/core1 。

8.Solr 首位*檢索

    solr 支持 *在第一位的搜索,只是性能很差,要掃描所有的倒排鏈。
相關文章
相關標籤/搜索