Lucene + Pinyin4J 提供首字母搜尋(——)

來源:互聯網
上載者:User

標籤:its   redo   analyzer   bin   ddr   實現   http   pinyin4j   不難   

 遇到一個集團需求,要求在地址查詢時候提供拼音搜尋,第一反應應該不難,不過實現過程中卻一波三折。

1、第一步是講欄位首字母進行索引,具體可以使用Pinyin4j提供的方法完成。

2、原來系統用的lucene3.0,分詞用的ikanalyzer3.2 ,不支援連續字母和數位分詞,網上搜尋下 ikanalyzer5.2 可以支援,下載下來發現必須用1.7JDK,如此高的版本,實際上已經把採納的可能槍斃了。然後進行測試,發現仍然不行。最後找到 WildcardQuery 查詢;具體代碼如下

Boolean isPingYin = false;
if(firstCharacter.matches("^[A-Za-z]+$")){
isPingYin = true;
}
if(isPingYin) {

if(tempStandName.length()<4) {
return list;
}

WildcardQuery wq=new WildcardQuery(new Term("standNamePingyin","*" + tempStandName + "*"));
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(wq, Occur.MUST);
TermQuery termQuery1 = new TermQuery(new Term("outSide", "0"));
booleanQuery.add(termQuery1, Occur.MUST);

TermQuery termQuery2 = new TermQuery(new Term("bindEqps", "1"));
booleanQuery.add(termQuery2, Occur.MUST);
/**
* 模糊查詢器
*/
TopDocs topDocs_pp = isearcher.search(booleanQuery, count);

ScoreDoc[] scoreDocs_pp = topDocs_pp.scoreDocs;
for (int i = 0; i < (topDocs_pp.totalHits > count ? count : topDocs_pp.totalHits); i++)
{
VOqryAddrSegm voQAS = new VOqryAddrSegm();
Document targetDoc = isearcher.doc(scoreDocs_pp[i].doc);
voQAS.setSegmID(targetDoc.get("segmId"));
voQAS.setStandName(targetDoc.get("standName"));
voQAS.setSegmType(targetDoc.get("segmType"));
voQAS.setRegionId(targetDoc.get("regionId"));
voQAS.setBindEqps(targetDoc.get("bindEqps"));
voQAS.setOutSide(targetDoc.get("outSide"));
list.add(voQAS);
}



}

實現的效果:

 

Lucene + Pinyin4J 提供首字母搜尋(——)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.