Lucene full-text search (b)

Find index

step

  • Creating a Director object that specifies the index database location
  • Creating a IndexReader objects
  • Creating a IndexSearcher object parameter indexReader object constructor method.
  • Create a Query object, such as TermQuery
  • Execute a query, get a TopDocs objects
  • The total number of records fetch query results
  • Take a list of documents
  • The contents of the printed document
  • Close Object IndexReader
public void searchIndex() throws Exception {
        /**
         * 1、创建一个Director对象,指定索引库的位置
         */
        Directory directory = FSDirectory.open(new File("C:\\temp\\index").toPath());
        /**
         * 2、创建一个IndexReader对象
         */
        IndexReader indexReader = DirectoryReader.open(directory);
        /**
         * 3、创建一个IndexSearcher对象,构造方法中的参数indexReader对象。
         */
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);
        /** 
         * 创建一个Query对象,TermQuery
         */
        Query query = new TermQuery(new Term("name", "spring"));
        /**
         * 5、执行查询,得到一个TopDocs对象
         * 参数1:查询对象 参数2:查询结果返回的最大记录数
         */
        TopDocs topDocs = indexSearcher.search(query, 10);
        /**
         * 6、取查询结果的总记录数
         */
        System.out.println("查询总记录数:" + topDocs.totalHits);
        /**
         * 7、取文档列表
         */
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        /**
         * 8、打印文档中的内容
         */
        for (ScoreDoc doc :scoreDocs) {
        	//获取得分(相关度)
        	System.out.println("相关度:" + scoreDocs.score);
            //取文档id
            int docId = doc.doc;
            //根据id取文档对象
            Document document = indexSearcher.doc(docId);
            System.out.println(document.get("name"));
            System.out.println(document.get("path"));
            System.out.println(document.get("size"));
            //System.out.println(document.get("content"));
            System.out.println("-----------------寂寞的分割线");
        }
        //9、关闭IndexReader对象
        indexReader.close();
    }

Query subclasses

  • TermQuery

    • Query subclasses, Lucene supports a basic query class will not be word
    • example:Query query = new TermQuery(new Term("filename", "lucene"));
  • RangeQuery

    • The scope of the inquiry carried out LongPoint
    • example:Query query = LongPoint.newRangeQuery("size", 0l, 100l);
  • NumericRangeQuery

    • Digital range query
    • example:Query newLongRange = NumericRangeQuery.newLongRange("fileSize",0l, 100l, true, true);
  • PrefixQuery

    • Prefix queries, query word contains the specified character beginning
    • example:PrefixQuery query = new PrefixQuery(new Term("fileName","hell"));
  • FuzzyQuery

    • Fuzzy query
    • example:FuzzyQuery query = new FuzzyQuery(new Term("fileName","lucene"));
  • WildcardQuery

    • Wildcard queries
      • *: Any character (0 or more)
      • ?: A character
    • example:WildcardQuery query = new WildcardQuery(new Term("fileName","*"));
  • RegexQuery

    • Regular Expressions query
    • example:RegexQuery query = new RegexQuery(new Term("fileName","[a-z]{1,6}"));
  • BooleanQuery

    • Boolean queries, is a combination of (a combination of multiple query conditions) Query
    • Join condition
      • Occur.MUST
      • Occur.SHOULD
      • Occur.FILTER
      • Occur.MUST_NOT
    • example
      TermQuery termQuery1 = new TermQuery(new Term("fileName", "lucene"));
      TermQuery termQuery2 = new TermQuery(new Term("fileName", "name"));
      
      BooleanQuery query1 = new BooleanQuery();
      BooleanQuery query2 = new BooleanQuery();
      
      query1.add(termQuery1, Occur.SHOULD);
      query2.add(termQuery2, Occur.SHOULD);
      
      //组合多个query
      query1.add(query2, Occur.SHOULD);  
      

QueryParser
use QueryPaser query, the content can be queried first word, and then query based on the results of segmentation.

public void testQueryParser() throws Exception {
        //创建一个QueryPaser对象,两个参数
        QueryParser queryParser = new QueryParser("name", new IKAnalyzer());
        //参数1:默认搜索域,参数2:分析器对象
        //使用QueryPaser对象创建一个Query对象
        Query query = queryParser.parse("lucene是一个Java开发的全文检索工具包");
        //TODO 执行查询
  }
  • MultiFieldQueryParser
    • Query multiple field
    • example
      String[] fields = {"fileName","fileContent"};
      MultiFieldQueryParser queryParser = new MultiFieldQueryParser(fields, new StandardAnalyzer());
      Query query = queryParser.parse("fileName:lucene AND filePath:a");
      

Visualization Luke

Luke is a visual tool used to query Lucene / Solr / Elasticsearch index

Link: https: //pan.baidu.com/s/110VLjtuTSjNFUGiKDW9yTg
extraction code: wnc3

  • index library generated file
    Here Insert Picture Description
    expansion name Description
    Here Insert Picture Description
    • Luke used (7.40 claim JDK9)
      Here Insert Picture Description
      Here Insert Picture Description
      Here Insert Picture Description
Published 109 original articles · won praise 47 · views 30000 +

Guess you like

Origin blog.csdn.net/weixin_43934607/article/details/104416691