官术网_书友最值得收藏!

3.3.2 常用查詢

Query是一個用于查詢的抽象基類,有各種具體查詢實現(xiàn)類,比如實現(xiàn)基本詞查詢的TermQuery、實現(xiàn)布爾邏輯查詢的BooleanQuery、實現(xiàn)短語查詢的PhraseQuery、實現(xiàn)前綴匹配查詢的PrefixQuery、實現(xiàn)區(qū)間查詢的RangeQuery、實現(xiàn)多詞查詢的MultiTermQuery、實現(xiàn)過濾條件查詢的FilteredQuery、約束多個查詢詞密集度的SpanQuery等。

對于復(fù)雜查詢,需要調(diào)用rewrite()方法使其變成簡單的查詢。例如,一個PrefixQuery將被重寫成由TermQuery組成的BooleanQuery。

可以使用QueryParser查詢分詞列。一般不需要查詢沒有使用分詞的列,如果要查詢,可以使用TermQuery查詢,例如url列。

最基本的詞條查詢使用TermQuery,用來查詢不切分的字段。例如查詢一個雜志:

        Term term = new Term("journal_id", "1672-6251");
        TermQuery query = new TermQuery(term);

為了方便測試查詢,使用createDocument()方法索引測試內(nèi)容。

        private static Document createDocument(String id, String content) { //創(chuàng)建文檔
            Document doc = new Document();
            doc.add(new Field("id", id, StringField.TYPE_STORED)); //索引不分詞的字符串列
            //索引分詞的文本列
            doc.add(new Field("contents", content, TextField.TYPE_STORED));
            return doc;
        }

組合條件查詢使用布爾邏輯查詢BooleanQuery。下面舉一個布爾邏輯查詢的例子:同時查詢標(biāo)題列和內(nèi)容列。使用BooleanClause.Occur.SHOULD的查詢效果如圖3-10所示。

圖3-10 BooleanClause.Occur.SHOULD查詢效果

        QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "body",
        analyzer);
        Query bodyQuery =  parser.parse("NBA"); //查詢內(nèi)容列
        parser = new QueryParser(Version.LUCENE_CURRENT, "title", analyzer);
        Query titleQuery = parser.parse("NBA"); //查詢標(biāo)題列


        BooleanQuery bodyOrTitleQuery = new BooleanQuery();
        //用OR條件合并兩個查詢
        bodyOrTitleQuery.add(bodyQuery, BooleanClause.Occur.SHOULD);
        bodyOrTitleQuery.add(titleQuery, BooleanClause.Occur.SHOULD);


        //返回前10條結(jié)果
        ScoreDoc[] hits = isearcher.search(bodyOrTitleQuery, 10).scoreDocs;
主站蜘蛛池模板: 郧西县| 望城县| 松滋市| 新郑市| 漳浦县| 双辽市| 奈曼旗| 富裕县| 兰西县| 邹平县| 文安县| 安义县| 云龙县| 泸定县| 乌恰县| 望城县| 扎赉特旗| 绥德县| 山阳县| 浦江县| 迭部县| 阳原县| 司法| 瑞安市| 澳门| 乌鲁木齐县| 托里县| 弥勒县| 靖西县| 铜山县| 油尖旺区| 柳河县| 沭阳县| 白河县| 大宁县| 南华县| 云浮市| 保康县| 安化县| 九江县| 玉龙|