日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Lucene提供的条件判断查询[转]

發布時間:2024/7/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lucene提供的条件判断查询[转] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Lucene提供的條件判斷查詢[轉]

第一、??? 按詞條搜索 - TermQuery
query = new TermQuery(new Term("name","word1"));
hits = searcher.search(query);
這樣就可以把 field 為 name 的所有包含 word1 的文檔檢索出來了。
第二、 “與或”搜索 - BooleanQuery
它實際是一個組合 query 看看下面的代碼:
query1 = new TermQuery(new Term("name","word1"));
query2 = new TermQuery(new Term("name","word2"));
?????????????????? BooleanQuery query=new BooleanQuery();
?????????? query.add(query1, BooleanClause.Occur.MUST);??
?????????????????? query.add(query2, BooleanClause.Occur.MUST);

hits = searcher.search(query);
?????????????????? 其中的MUST、SHOULD、MUST_NOT表示與、或、非,從字面意思很容易理解
Lucene 可以最多支持連續 1024 的 query 的組合。
第三、 在某一范圍內搜索 - RangeQuery
IndexSearcher searcher = new IndexSearcher("F:\資源\lucene研究\test");
???? Term beginTime = new Term("time","200001");
???? Term endTime = new Term("time","200005");
???? Hits hits = null;
???? RangeQuery query = null;
???? query = new RangeQuery(beginTime, endTime, false);
???? hits = searcher.search(query);
RangeQuery 的構造函數的參數分別代表起始、結束、是否包括邊界。這樣我們就可以按照要求檢索了。
第四、 使用前綴檢索 - PrefixQuery
這個檢索的機制有點類似于 indexOf() 從前綴查找。這個常在英文中使用,中文中就很少使用了。代碼如下:
IndexSearcher searcher = new IndexSearcher("F:\資源\lucene研究\test");
?????? Term pre1 = new Term("name", "Da");
?????? query = new PrefixQuery(pre1);
?????? hits = searcher.search(query);
第五、 多關鍵字的搜索 - PhraseQuery
可以多個關鍵字同時查詢。使用如下:
query = new PhraseQuery();
?????? query.add(word1);
?????? query.add(word2);
?????? query.setSlop(0);
?????? hits = searcher.search(query);
?????? printResult(hits, "'david' 與 'mary' 緊緊相隔的 Document");
?????? query.setSlop(2);
?????? hits = searcher.search(query);
?????? printResult(hits, "'david' 與 'mary' 中相隔兩個詞的短語 ");
??? 這里我們要注意 query.setSlop(); 這個方法的含義。
query.setSlop(0); 緊緊相連 (這個的條件比較苛刻)
query.setSlop(2); 相隔
第六、 使用短語綴搜索 - PharsePrefixQuery
使用 PharsePrefixQuery 可以很容易的實現相關短語的檢索功能。
實例:
query = new PhrasePrefixQuery();
?????? // 加入可能的所有不確定的詞
Term word1 = new Term("content", "david");
?????? Term word2 = new Term("content", "mary");
?????? Term word3 = new Term("content", "smith");
?????? Term word4 = new Term("content", "robert");
?????? query.add(new Term[]{word1, word2});
?????? // 加入確定的詞
?????? query.add(word4);
?????? query.setSlop(2);
?????? hits = searcher.search(query);
?????? printResult(hits, " 存在短語 'david robert' 或 'mary robert' 的文檔 ");
第七、 相近詞語的搜索 - fuzzyQuery
可以通俗的說它是一種模糊查詢。
實例:
Term word1 = new Term("content", "david");
?????? Hits hits = null;
?????? FuzzyQuery query = null;
?????? query = new FuzzyQuery(word1);
?????? hits = searcher.search(query);
?????? printResult(hits," 與 'david' 相似的詞 ");
第八、 使用通配符搜索 - WildcardQuery
實例:
IndexSearcher searcher = new IndexSearcher("F:\資源\lucene
研究\test");


?????? Term word1 = new Term("content", "*ever");


?????? Term word2 = new Term("content", "wh?ever");


?????? Term word3 = new Term("content", "h??ever");


?????? Term word4 = new Term("content", "ever*");


?????? WildcardQuery query = null;


?????? Hits hits = null;


?????? query = new WildcardQuery(word1);


?????? hits = searcher.search(query);


?????? printResult(hits, "*ever");


?????? query = new WildcardQuery(word2);


?????? hits = searcher.search(query);


?????? printResult(hits, "wh?ever");????

?????? query = new WildcardQuery(word3);


?????? hits = searcher.search(query);


?????? printResult(hits, "h??ever");????

?????? query = new WildcardQuery(word4);


?????? hits = searcher.search(query);


?????? printResult(hits, "ever*");


??? 由上可以看出通配符?代便 1 個字符, * 代表 0 到多個字符。
Lucene 現在支持以上八中的搜索方式,我們可以根據需要選擇適合自己的搜索方式。當然上面提供的一些可能對英文還是比較有效,中文就不可取了,所以我們開始想想百度,我們只在一個輸入框中搜索結果。有了這個疑問我們揭開下一章的討論吧!
查詢字符串的解析:這個就是我們經常在一個輸入框中輸入我們要檢索的文字,交給搜索引擎去幫我們分詞。
QueryParser 類就是對查詢字符串的解析類。
看看它的用法:
query = QueryParser.parse(key1, "name", new StandardAnalyzer());
hits = searcher.search(query);
它直接返回一個 Query 對象。需要傳入的參數分別是:
用戶需要查詢的字符串、需要檢索的對應字段名稱、采用的分詞類。
Analyzer analyzer = new CJKAnalyzer();
String[] fields = {"filename", "content"};
Query query = MultiFieldQueryParser.parse(searchword, fields, analyzer);
Hits hits = searcher.search(query);
QueryParser 的“與” 和 “或”:
QueryParser 之間默認是或,我們想改變為與的話加入以下代碼:
QueryParser.setOperator(QueryParser.DEFAULT_OPERATOR_AND);
就可以了。

posted on 2011-07-21 11:10 放逐憂傷 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/navy235/archive/2011/07/21/2112561.html

總結

以上是生活随笔為你收集整理的Lucene提供的条件判断查询[转]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。