zoukankan      html  css  js  c++  java
  • 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打印出需要插入的同义词。

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

      

      

  • 相关阅读:
    游记 Day10
    游记 Day9
    NOIP模拟测试10
    【贪心】P3942 将军令 && P2279 消防局的设立
    在没有上考场之前,菜鸡也有翻盘的机会
    【数据结构】 圆方树&&广义圆方树
    快速幂&&龟速乘&&快速乘
    游记 Day 4
    【容斥】[ZJOI2016] 小星星
    游记 Day3
  • 原文地址:https://www.cnblogs.com/ydxblog/p/5662905.html
Copyright © 2011-2022 走看看