天天看點

Lucene5學習之WildcardQuery使用

     wildcardquery即通配符查詢,即使用通配符來模糊查詢,常見的通配符有?,*,-等等,通配符不知道怎麼使用的自己google學習下吧。照例還是先閱讀官方的api文檔:

Lucene5學習之WildcardQuery使用

 特别要注意的note後面的話,提醒我們注意,wildcardquery查詢是很慢的,因為它需要周遊很多的term,為了避免極慢的查詢速度,請不要使用以星号開頭的通配符進行查詢。

   除了官方給的那點提醒以外,我也要提醒大家一點,wildcardquery對于使用者輸入的查詢關鍵字是大小寫敏感的,請不要使用大寫形式,因為索引中的term都是小寫形式的,這個大家都知道的,特此提醒。

wildcardquery構造函數除了需要一個term對象以外,還有一個參數需要設定maxdeterminizedstates,源碼注釋裡是這樣解釋的:

Lucene5學習之WildcardQuery使用

/** 

   * constructs a query for terms matching <code>term</code>. 

   * @param maxdeterminizedstates maximum number of states in the resulting 

   *   automata.  if the automata would need more than this many states 

   *   toocomplexttodeterminizeexception is thrown.  higher number require more 

   *   space but can process more complex automata. 

   */  

  public wildcardquery(term term, int maxdeterminizedstates) {  

    super(term, toautomaton(term), maxdeterminizedstates);  

  }  

 其實就是設定根據通配符支援最大能支援有多少term情況,term越多占的硬碟空間越大,但查詢也更精确。這個值預設源碼裡給定的是10000,預設即可。

其他也沒什麼好說的,wildcardquery使用難度也不大,照樣貼一個使用示例吧:

Lucene5學習之WildcardQuery使用

string directorypath = "d:/lucenedir";  

string fieldname = "contents";  

string querystring = "*recursive*";   

query query = new wildcardquery(new term(fieldname,querystring));  

 示例代碼的意圖就是查詢索引文檔中包含recursive這個單詞的,ok,打完收工了,此時此刻2015-03-24 22:26,該睡覺了。預計接下來要說說的就是spanquery了。

如果你還有什麼問題請加我Q-q:7-3-6-0-3-1-3-0-5,

或者加裙

Lucene5學習之WildcardQuery使用

一起交流學習!

轉載:http://iamyida.iteye.com/blog/2195249