|
|
@@ -1,120 +0,0 @@
|
|
|
-package cn.reghao.tnb.content.app.vod.service.lucene;
|
|
|
-
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.apache.lucene.document.Document;
|
|
|
-import org.apache.lucene.document.LongPoint;
|
|
|
-import org.apache.lucene.index.DirectoryReader;
|
|
|
-import org.apache.lucene.index.IndexReader;
|
|
|
-import org.apache.lucene.index.Term;
|
|
|
-import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
|
|
|
-import org.apache.lucene.queryparser.classic.ParseException;
|
|
|
-import org.apache.lucene.queryparser.classic.QueryParser;
|
|
|
-import org.apache.lucene.search.*;
|
|
|
-import org.apache.lucene.store.Directory;
|
|
|
-import org.apache.lucene.store.FSDirectory;
|
|
|
-import org.wltea.analyzer.lucene.IKAnalyzer;
|
|
|
-
|
|
|
-import java.io.IOException;
|
|
|
-import java.nio.file.Paths;
|
|
|
-
|
|
|
-/**
|
|
|
- * @author reghao
|
|
|
- * @date 2023-03-02 09:29:04
|
|
|
- */
|
|
|
-@Slf4j
|
|
|
-public class LuceneQuery {
|
|
|
- private final static String indexDirPath = "/opt/tmp/jsearch";
|
|
|
-
|
|
|
- static void query(Query query) {
|
|
|
- try {
|
|
|
- Directory directory = FSDirectory.open(Paths.get(indexDirPath));
|
|
|
- IndexReader indexReader = DirectoryReader.open(directory);
|
|
|
- IndexSearcher indexSearcher = new IndexSearcher(indexReader);
|
|
|
-
|
|
|
- // 查询前 100 条数据
|
|
|
- TopDocs topDocs = indexSearcher.search(query, 100);
|
|
|
- log.info("本次搜索共找到" + topDocs.totalHits.value + "条数据");
|
|
|
- ScoreDoc[] scoreDocs = topDocs.scoreDocs;
|
|
|
- for (ScoreDoc scoreDoc : scoreDocs) {
|
|
|
- Document document = indexReader.document(scoreDoc.doc);
|
|
|
- log.info(document.toString());
|
|
|
- //log.info("id={},name={},poems={},success={},score={}", document.get("id"), document.get("name"), document.get("poems"), document.get("success"), scoreDoc.score);
|
|
|
- }
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static void termQuery() {
|
|
|
- Query query = new TermQuery(new Term("name", "李白"));
|
|
|
- query(query);
|
|
|
- }
|
|
|
-
|
|
|
- public static PrefixQuery prefixQuery(String field, String startWith) {
|
|
|
- return new PrefixQuery(new Term(field, startWith));
|
|
|
- }
|
|
|
-
|
|
|
- public static void prefixQuery1(String field, String startWith) {
|
|
|
- Query query1 = new TermQuery(new Term("tableName", "RujiaHotel"));
|
|
|
- Query query2 = new PrefixQuery(new Term(field, startWith));
|
|
|
-
|
|
|
- BooleanQuery.Builder builder = new BooleanQuery.Builder();
|
|
|
- builder.add(query1, BooleanClause.Occur.MUST);
|
|
|
- builder.add(query2, BooleanClause.Occur.MUST);
|
|
|
- BooleanQuery booleanQuery = builder.build();
|
|
|
- query(booleanQuery);
|
|
|
- }
|
|
|
-
|
|
|
- public static void wildcardQuery() {
|
|
|
- Query query = new WildcardQuery(new Term("name", "李?"));
|
|
|
- query(query);
|
|
|
- }
|
|
|
-
|
|
|
- public static void fuzzyQuery() {
|
|
|
- //"李百"->"李白",只需修改一次,故可以搜索到数据;"里百"则搜索不到数据
|
|
|
- Query query = new FuzzyQuery(new Term("name", "里百"), 1);
|
|
|
- query(query);
|
|
|
- }
|
|
|
-
|
|
|
- public static void numberQuery() {
|
|
|
- //精确查询
|
|
|
- Query query = LongPoint.newExactQuery("id", 123456);
|
|
|
- query(query);
|
|
|
-
|
|
|
- //范围查询
|
|
|
- query = LongPoint.newRangeQuery("id", 123L, 12345678L);
|
|
|
- query(query);
|
|
|
- }
|
|
|
-
|
|
|
- public static void booleanQuery() {
|
|
|
- Query query1 = new TermQuery(new Term("name", "李白"));
|
|
|
- Query query2 = new TermQuery(new Term("name", "杜甫"));
|
|
|
- BooleanQuery.Builder builder = new BooleanQuery.Builder();
|
|
|
- builder.add(query1, BooleanClause.Occur.SHOULD);
|
|
|
- builder.add(query2, BooleanClause.Occur.SHOULD);
|
|
|
- BooleanQuery booleanQuery = builder.build();
|
|
|
- query(booleanQuery);
|
|
|
- }
|
|
|
-
|
|
|
- public static void boostQuery() {
|
|
|
- Query query1 = new BoostQuery(new TermQuery(new Term("name", "李白")), 1.5f);
|
|
|
- Query query2 = new BoostQuery(new TermQuery(new Term("name", "杜甫")), 1.6f);
|
|
|
- BooleanQuery.Builder builder = new BooleanQuery.Builder();
|
|
|
- builder.add(query1, BooleanClause.Occur.SHOULD);
|
|
|
- builder.add(query2, BooleanClause.Occur.SHOULD);
|
|
|
- BooleanQuery booleanQuery = builder.build();
|
|
|
-
|
|
|
- query(booleanQuery);
|
|
|
- }
|
|
|
-
|
|
|
- public static void queryParserQuery() throws ParseException {
|
|
|
- QueryParser queryParser = new QueryParser("name", new IKAnalyzer());
|
|
|
- Query query = queryParser.parse("李白和杜甫");
|
|
|
- query(query);
|
|
|
-
|
|
|
- //多字段查询
|
|
|
- MultiFieldQueryParser multiFieldQueryParser = new MultiFieldQueryParser(new String[]{"name", "about"}, new IKAnalyzer());
|
|
|
- query = multiFieldQueryParser.parse("李白和子美");
|
|
|
- query(query);
|
|
|
- }
|
|
|
-}
|