日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

lucene多樣化搜索,結(jié)果排序。

系統(tǒng) 1831 0
一:多樣化的搜索

/** *** 一個(gè)關(guān)鍵字,對(duì)一個(gè)字段進(jìn)行查詢 **** */
QueryParser qp = new QueryParser("content",analyzer);
query = qp.parse(keyword);
Hits hits = searcher.search(query);

/** *** 模糊查詢 **** */
Term term = new Term("content",keyword);
FuzzyQuery fq = new FuzzyQuery(term);
Hits hits = searcher.search(fq);

/** *** 一個(gè)關(guān)鍵字,在兩個(gè)字段中查詢 **** */
/*
* 1.BooleanClause.Occur[]的三種類型: MUST : + and MUST_NOT : - not SHOULD : or
* 2.下面查詢的意思是:content中必須包含該關(guān)鍵字,而title有沒有都無所謂
* 3.下面的這個(gè)查詢中,Occur[]的長度必須和Fields[]的長度一致。每個(gè)限制條件對(duì)應(yīng)一個(gè)字段
*/
BooleanClause.Occur[] flags = new BooleanClause.Occur[]{BooleanClause.Occur.SHOULD,BooleanClause.Occur.MUST};
query=MultiFieldQueryParser.parse(keyword,new String[]{"title","content"},flags,analyzer);


/** *** 兩個(gè)(多個(gè))關(guān)鍵字對(duì)兩個(gè)(多個(gè))字段進(jìn)行查詢,默認(rèn)匹配規(guī)則 **** */
/*
* 1.關(guān)鍵字的個(gè)數(shù)必須和字段的個(gè)數(shù)相等
* 2.由于沒有指定匹配規(guī)定,默認(rèn)為"SHOULD" 因此,下面查詢的意思是:"title"中含有keyword1 或 "content"含有keyword2.
* 在此例中,把keyword1和keyword2相同
*/
query=MultiFieldQueryParser.parse(new String[]{keyword,keyword},new
String[]{"title","content"},analyzer);


/** *** 兩個(gè)(多個(gè))關(guān)鍵字對(duì)兩個(gè)(多個(gè))字段進(jìn)行查詢,手工指定匹配規(guī)則 **** */
/*
* 1.必須 關(guān)鍵字的個(gè)數(shù) == 字段名的個(gè)數(shù) == 匹配規(guī)則的個(gè)數(shù)
* 2.下面查詢的意思是:"title"必須不含有keyword1,并且"content"中必須含有keyword2
*/
BooleanClause.Occur[] flags = new
BooleanClause.Occur[]{BooleanClause.Occur.MUST_NOT,BooleanClause.Occur.MUST};
query=MultiFieldQueryParser.parse(new String[]{keyword,keyword},new
String[]{"title","content"},flags,analyzer);


/** *** 對(duì)日期型字段進(jìn)行查詢 **** */

/** *** 對(duì)數(shù)字范圍進(jìn)行查詢 **** */
/*
* 1.兩個(gè)條件必須是同一個(gè)字段
* 2.前面一個(gè)條件必須比后面一個(gè)條件小,否則找不到數(shù)據(jù)
* 3.new RangeQuery中的第三個(gè)參數(shù),表示是否包含"=" true: >= 或 <= false: > 或 <
* 4.找出 55>=id>=53 or 60>=id>=57:
*/
Term lowerTerm1 = new Term("id","53");
Term upperTerm1 = new Term("id","55");
RangeQuery rq1 = new RangeQuery(lowerTerm1,upperTerm1,true);

Term lowerTerm2 = new Term("id","57");
Term upperTerm2 = new Term("id","60");
RangeQuery rq2 = new RangeQuery(lowerTerm2,upperTerm2,true);

BooleanQuery bq = new BooleanQuery();
bq.add(rq1,BooleanClause.Occur.SHOULD);
bq.add(rq2,BooleanClause.Occur.SHOULD);
Hits hits = searcher.search(bq);


二:結(jié)果排序

排序的關(guān)鍵點(diǎn)有兩個(gè):

1:首先你要排序的字段必須是被index的,并且是untokenized的。

如:

doc.add( new Field( " click " ,dv.get( " click " ).toString(),Field.Store.NO,Field.Index.UN_TOKENIZED));

2:在檢索時(shí)候:

如:

/***** 排序 *****/
/*
* 1.被排序的字段必須被索引過(Indexecd),在索引時(shí)不能 用 Field.Index.TOKENIZED
* (用UN_TOKENIZED可以正常實(shí)現(xiàn).用NO時(shí)查詢正常,但排序不能正常設(shè)置升降序)
* 2.SortField類型
* SCORE、DOC、AUTO、STRING、INT、FLOAT、CUSTOM此類型主要是根據(jù)字段的類型選擇
* 3.SortField的第三個(gè)參數(shù)代表是否是降序true:降序 false:升序
*/
Sort sort = new Sort(new SortField[]{new SortField("click", SortField.INT, true)});
Hits hits = searcher.search(querystring,sort);

/*
* 按日期排序
*/
Sort sort = new Sort(new SortField[]{new SortField("createTime", SortField.INT, false)});


/***** 過濾器 ******/
QueryParser qp1 = new QueryParser("content",analyzer);
Query fquery = qp1.parse("我");

BooleanQuery bqf = new BooleanQuery();
bqf.add(fquery,BooleanClause.Occur.SHOULD);

QueryFilter qf = new QueryFilter(bqf);

Hits hits = searcher.search(query);

lucene多樣化搜索,結(jié)果排序。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 葫芦岛市| 江西省| 丰镇市| 齐齐哈尔市| 临汾市| 陆良县| 凌源市| 长岭县| 涡阳县| 平顺县| 苍梧县| 温州市| 赤城县| 阜南县| 元江| 横山县| 文成县| 兴安盟| 门头沟区| 乌拉特后旗| 邯郸县| 元阳县| 绥芬河市| 平遥县| 乐平市| 富顺县| 高邑县| 民县| 嘉峪关市| 盖州市| 龙海市| 松滋市| 林口县| 巴林右旗| 肃南| 津市市| 邵东县| 富民县| 清流县| 宜宾市| 木里|