Lucene實現多種高階搜尋形式

2022-10-08 14:45:11 字數 2163 閱讀 2444

布林操作符

大多數的搜尋引擎都會提供布林操作符讓使用者可以組合查詢,典型的布林操作符有 and, or, not。lucene 支援 5種布林操作符,分別是 and, or, not, 加(+), 減(-)。接下來我會講述每個操作符的用法。

or: 如果你要搜尋含有字元 a 或者 b 的文件,那麼就需要使用 or操作符。需要記住的是,如果你只是簡單的用空格將兩個關鍵詞分割開,其實在搜尋的時候搜尋引擎會自動在兩個關鍵詞之間加上 or操作符。例如,「j**a or lucene」 和 「j**a lucene」 都是搜尋含有 j**a 或者含有 lucene的文件。

and: 如果你需要搜尋包含乙個以上關鍵詞的文件,那麼就需要使用 and 操作符。例如,「j**a and lucene」返回所有既包含 j**a 又包含 lucene 的文件。

not: not 操作符使得包含緊跟在 not 後面的關鍵詞的文件不會被返回。例如,如果你想搜尋所有含有 j**a 但不含有lucene 的文件,你可以使用查詢語句 「j**a not lucene」。但是你不能只對乙個搜尋詞使用這個操作符,比如,查詢語句「not j**a」 不會返回任何結果。

加號(+): 這個操作符的作用和 and 差不多,但它只對緊跟著它的乙個搜尋詞起作用。例如,如果你想搜尋一定包含j**a,但不一定包含 lucene 的文件,就可以使用查詢語句「+j**a lucene」。

減號(-): 這個操作符的功能和 not 一樣,查詢語句 「j**a -lucene」 返回所有包含 j**a 但不包含lucene 的文件。

接下來我們看一下如何利用 lucene 提供的 api 來實現布林查詢。清單1 顯示了如果利用布林操作符進行查詢的過程。

清單1:使用布林操作符

//test boolean operator

public void testoperator(string indexdirectory) throw***ception;

analyzer language = new standardanalyzer();

query query;

for(int i = 0; i < searchwords.length; i++)

域搜尋(field search)

lucene 支援域搜尋,你可以指定一次查詢是在哪些域(field)上進行。例如,如果索引的文件包含兩個域,title 和content,你就可以使用查詢 「title: lucene and content: j**a」 來返回所有在 title域上包含 lucene 並且在 content 域上包含 j**a 的文件。清單 2 顯示了如何利用 lucene 的 api來實現域搜尋。

清單2:實現域搜尋

//test field search

public void testfieldsearch(string indexdirectory) throw***ception;

query query;

for(int i = 0; i < searchwords.length; i++)

模糊查詢

lucene 提供的模糊查詢基於編輯距離演算法(edit distance algorithm)。你可以在搜尋詞的尾部加上字元 ~來進行模糊查詢。例如,查詢語句 「think~」 返回所有包含和 think類似的關鍵詞的文件。清單 4 顯示了如果利用lucene 的 api 進行模糊查詢的**。

清單4:實現模糊查詢

//test fuzzy search

public void testfuzzysearch(string indexdirectory)throw***ception;

query query;

for(int i = 0; i < searchwords.length; i++)

範圍搜尋(range search)

範圍搜尋匹配某個域上的值在一定範圍的文件。例如,查詢 「age:[18 to 35]」 返回所有 age 域上的值在 18 到35 之間的文件。清單5顯示了利用 l程式設計客棧ucene 的 api 進行返回搜尋的過程。

清單5:測試範圍搜尋

//test range search

public void testrangesearch(string indexdirectory)throw***ception

本文標題: lucene實現多種高階搜尋形式

本文位址: /ruanjian/j**a/187317.html

lucene的多種搜尋

lucene的搜尋相當強大,它提供了很多輔助查詢類,各自完成一種特殊的查詢,也可以相互組合使用,來完成一些複雜的操作.public class test 按詞條搜尋 public void termsearcher throws ioexception 短語搜尋 public void phrase...

lucene的多種搜尋

lucene的搜尋相當強大,它提供了很多輔助查詢類,各自完成一種特殊的查詢,也可以相互組合使用,來完成一些複雜的操作.public class test 按詞條搜尋 public void termsearcher throws ioexception 短語搜尋 public void phrase...

lucene 高階搜尋篇

一,概念 1 lucene相關排序流程 2 lucene相關類 query類 乙個抽象類,lucene檢索結果最終評分的總控制中心。其它評分有關的類和物件都是由 query類來管理和生產。weight類介面 定義 query權重計算的乙個實現介面,可以被重用。weight類可以用來生成 scorer...