• lucene in action


    1.  索引——好比字典的索引一样,进行查询时使用

    2. Field.Index.NO 则没有索引,则不能被搜索

    3. 

    第三章 

    PhraseQuery 短语查询

    按照顺序添加term

    PharseQuery 短语查询的评分:

    public class App 
    {
        public static void main( String[] args ) throws IOException, ParseException
        {
            Directory dir = new RAMDirectory();
            IndexWriterConfig conf = new IndexWriterConfig(new WhitespaceAnalyzer());
            IndexWriter writer = new IndexWriter(dir, conf);
            Document doc = new Document();
            doc.add(new TextField("text", "lazy dog jump over cat", Field.Store.YES));
            writer.addDocument(doc);
            
            doc = new Document();
            doc.add(new TextField("text", "lazy haha dog lala jump ooo over this cat", Field.Store.YES));
            writer.addDocument(doc);
            
            doc = new Document();
            doc.add(new TextField("text", "dog lazy haha pig lala jump ooo over this cat", Field.Store.YES));
            writer.addDocument(doc);
            
            IndexReader reader = DirectoryReader.open(writer, true);
            IndexSearcher searcher = new IndexSearcher(reader);
            
    //      Query query = new MatchAllDocsQuery();
            
            QueryParser parser = new  QueryParser("text", new WhitespaceAnalyzer());
            parser.setDefaultOperator(Operator.AND);
            Query query = parser.parse(""dog cat"~5");
            System.out.println("query["+query.toString()+"]");
            
            TopDocs hits = searcher.search(query, 10);
            System.out.println(hits.totalHits);
            ScoreDoc[] docs = hits.scoreDocs;
            for(ScoreDoc scoreDoc : docs){
            	int docID = scoreDoc.doc;
            	float score = scoreDoc.score;
            	Document docu = searcher.doc(docID);
            	System.out.println(docID+" - "+score+" - "+docu.get("text"));
            }
        }
    }
    

      经测试,

      首先,只返回符合条件的查询结果。如:查找slop=2的,那么项间距大于2的不会被检索到。

      其次,短语查询不是布尔查询。它根据匹配所需要的编辑距离来进行评分。返回的结果中,项之间距离越小,评分越高,排序越靠前

        最后,松散的短语查询不需要按照顺序进行匹配,但是SpanNearQuery能够确保按照顺序匹配。

     第四章 分析器

    同义词过滤器实现:

    直观想法是在有同义词的位置插入同义词,位置增量为0.

    实现起来和直观想法不一样,因为TokenStream是流。具体实现的思路是:

    incrementToken每一次执行打印一个token, 我们应该是在有同义词的token的下一个token打印出需要插入的同义词。

    判断有同义词- 》存储到缓存, 下一次循环 -》先判断缓存是否有需要展示的同义词, 有则打印。

      

      

  • 相关阅读:
    5.9上午
    5.4下午
    5.4上午
    5.2上午
    4.19下午
    4.18上午
    4.17下午
    4.17上午
    4.12下午
    4.13下午
  • 原文地址:https://www.cnblogs.com/ydxblog/p/5662905.html
Copyright © 2020-2023  润新知