java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3012|回复: 2

【第三节】Lucene5文档域加权

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2096

    主题

    3754

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66788

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2016-6-20 14:49:36 | 显示全部楼层 |阅读模式
    1、源码# I! ^& d  m. A
    import java.nio.file.Paths;
    3 |% o( F3 {$ e) F: _$ T6 J, h. L0 ^- v( u3 j. P
    import org.apache.lucene.analysis.Analyzer;# s6 K; M0 n+ D% V- z; E6 y/ ?
    import org.apache.lucene.analysis.standard.StandardAnalyzer;
    & R1 I; a7 t. ^+ G) Limport org.apache.lucene.document.Document;/ O+ i1 s8 |9 k# b/ V0 c; N
    import org.apache.lucene.document.Field;
    0 z9 S. Z0 z& @$ I& gimport org.apache.lucene.document.StringField;
    / g/ }9 i3 {* Wimport org.apache.lucene.document.TextField;
    % _% f5 P$ N. j7 H( jimport org.apache.lucene.index.DirectoryReader;
    ! _- q, d- f# ?7 u- fimport org.apache.lucene.index.IndexReader;" P- A7 O7 ^) Q5 j# k1 ?7 j1 m# P
    import org.apache.lucene.index.IndexWriter;
    , \! r% g7 J- S" Z6 Q- D$ ^import org.apache.lucene.index.IndexWriterConfig;
    & e4 K& m, n% `6 J' R, [0 ]1 qimport org.apache.lucene.index.Term;
    ( W; G, }) G% C% e) simport org.apache.lucene.search.IndexSearcher;
    * m, F# G5 o1 \9 Rimport org.apache.lucene.search.Query;" m$ E; F* ?: {1 U/ e) L
    import org.apache.lucene.search.ScoreDoc;/ B8 D0 P' m4 T) I5 L! w9 ?
    import org.apache.lucene.search.TermQuery;
    - q5 J0 o6 {" Ximport org.apache.lucene.search.TopDocs;
    - Z$ p9 g( E/ f. L5 S! simport org.apache.lucene.store.Directory;
    9 a$ x# P9 O# ^, X: O% C3 Uimport org.apache.lucene.store.FSDirectory;" Q7 p% V9 c5 y$ ?4 v3 x  }7 ?) x: Q
    import org.junit.Test;
    - C( W9 M( r- L' t3 |, F% w
    . q2 s9 z9 y; E. dpublic class IndexingTest2 {
    5 n/ ~3 n4 W% f2 G+ k
    / z8 h+ \4 K, D* N" j4 |    private String ids[]={"1","2","3","4"};
    $ y7 m( K+ u5 _0 K    private String authors[]={"Jack","Marry","John","Json"};
    ' R* X6 s9 g$ q& Y9 p5 B# R  d    private String positions[]={"accounting","technician","salesperson","boss"};- N* i/ j/ _5 n( k5 w. K; ^
        private String titles[]={"Java is a good language.","Java is a cross platform language","Java powerful","You should learn java"};
    * q7 @$ j, ^) }9 @1 ?! j8 O- w* F5 e  R    private String contents[]={0 v/ m0 v6 d: o# B
                "If possible, use the same JRE major version at both index and search time.",
    7 ~, Y3 s1 I) P( s  q            "When upgrading to a different JRE major version, consider re-indexing. ",
    9 R3 ^) g3 j. m+ A            "Different JRE major versions may implement different versions of Unicode,",
    ) _- h' Y+ z# `$ ^7 u8 X8 s            "For example: with Java 1.4, `LetterTokenizer` will split around the character U+02C6,"$ L0 }/ V1 O2 W% n3 G, T7 j  M: d
        };
    9 Q8 S$ D0 k" I; G9 c/ D% P. C% F
    1 [9 O; G$ _& D, _* K    private Directory dir;
    : z! R; h7 a: o0 r* M9 u; D' |$ w6 E' R* d2 K+ T6 Z7 A
        /**( B) f' b1 Z* h2 X" y
         * 获取IndexWriter实例
    8 M! ?7 `2 B# v8 D     * @return
    + L/ }# G$ c- @     * @throws Exception$ t3 A8 o# @7 c" p& p
         */; k+ m( o8 K6 O7 D2 L
        private IndexWriter getWriter()throws Exception{) y, a( X8 ^/ _+ W" z
            Analyzer analyzer=new StandardAnalyzer(); // 标准分词器
    ; \& P# [" k2 C" O7 N& l  D. o# M        IndexWriterConfig iwc=new IndexWriterConfig(analyzer);
    2 p8 r+ d7 k$ t6 {        IndexWriter writer=new IndexWriter(dir, iwc);# B- Z* l0 a) h# ?. p6 G  V1 ^
            return writer;
    - A2 Z( \" K* d2 m3 m2 R    }
    9 E' a( D" W9 K5 |$ ~
    & m% Y7 J1 c- P' X    /**# S4 H1 ~1 S2 C: i% g
         * 生成索引
    ( o' F) D, c' t. G+ o/ C4 }     * @throws Exception
    * ]( H1 {; j* S7 M+ O+ T8 `     */( C- a' j2 v3 ^7 @2 E& t; s
        @Test
    . ^3 Z. l( ~5 B: a/ ?1 T$ \    public void index()throws Exception{; n2 C; }; g% v. q2 V
            dir=FSDirectory.open(Paths.get("D:\\lucene3"));
    - [2 n8 Y4 d/ Z        IndexWriter writer=getWriter();
    5 C+ M# K# f, F" I& }* s" {        for(int i=0;i<ids.length;i++){
    3 x- |7 Z# ]' d% q- ?7 @            Document doc=new Document();
    ) u$ [2 c+ x0 }2 p$ ^6 J' N& k            doc.add(new StringField("id", ids, Field.Store.YES));7 ^6 r0 x/ k# D
                doc.add(new StringField("author",authors,Field.Store.YES));' }. A7 H6 T0 n5 @
                doc.add(new StringField("position",positions,Field.Store.YES));0 G8 G' J8 M8 r" y
                // 加权操作
    " L' I1 R; }  L3 ^            TextField field=new TextField("title", titles, Field.Store.YES);
    6 |) N1 U" F* Z, ?) B; ~            if("boss".equals(positions)){  `0 x& @' c1 I" u& e" m# j4 w$ J: e3 ~
                    field.setBoost(1.5f);
    ; l9 [+ M# t& r; a' ^            }
    $ F/ U( V* ]' z6 P0 j, d- c% _            doc.add(field);
    + y% k  Z0 r- U, o, w) p            doc.add(new TextField("content", contents, Field.Store.NO));
    7 L# h! U% ^; G9 v, n: p            writer.addDocument(doc); // 添加文档4 q  Z8 {6 k" \- S+ J
            }
    4 T' U/ v6 r2 j1 J+ h7 x        writer.close();
    ; |0 p( M' [3 N* ^    }
    ) N% |  K- @3 G* p3 j; l' A
    5 W* w/ ~; }- ]8 D    /**
    3 \. Q  x% F- @1 W% ]1 G     * 查询! O) w4 D; g) p, x  J
         * @throws Exception" k% \/ n( C8 s6 I8 ~% r: m/ m
         */4 v4 a% z* v% o2 W5 j+ @
        @Test
    ) w0 f+ K6 }5 M. R    public void search()throws Exception{
    2 v4 g$ |; Q( H0 |        dir=FSDirectory.open(Paths.get("D:\\lucene3"));7 ]& I; k; {; w, Z7 e6 ~. o+ J/ ?. J
            IndexReader reader=DirectoryReader.open(dir);6 r& m% B5 E) u: ~7 s
            IndexSearcher is=new IndexSearcher(reader);1 k8 V1 ?0 S' G! r  W' G, h
            String searchField="title";7 `" l+ Z/ m+ T; N
            String q="java";& K' h5 v! E! r
            Term t=new Term(searchField,q);
    - c5 t7 Y7 d; ~/ t. p1 y; r        Query query=new TermQuery(t);" A. a+ E1 g' |. z! K
            TopDocs hits=is.search(query, 10);
    ) q. @+ z/ V  v9 m8 Y' l# q        System.out.println("匹配 '"+q+"',总共查询到"+hits.totalHits+"个文档");; B) I; @6 R% N5 W& l7 K
            for(ScoreDoc scoreDoc:hits.scoreDocs){( v+ v- H% m. J& `) M( M
                Document doc=is.doc(scoreDoc.doc);
    . X6 ]4 O2 ^1 @0 X            System.out.println(doc.get("author"));. f& u* _1 E4 o) w( {
            }9 k7 O; ~# u" b' Z2 c1 u
            reader.close();
    * [/ m9 P- X" o: m9 [! Z0 O    }8 }& i( r) c9 ]4 R* L
    ; L# b) w) N+ e% e7 j
    }
    # W2 U# |! z1 l- ?- u1 w  W# Q0 X- e. S! g

    1 I/ m) J5 b& u6 m/ c$ Y6 C/ B
    ; f1 h0 J4 Z' G  |7 p4 i* J
    回复

    使用道具 举报

  • TA的每日心情

    2016-10-29 14:08
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    15

    帖子

    41

    积分

    普通会员

    Rank: 2

    积分
    41
    发表于 2016-10-29 14:14:51 | 显示全部楼层
    看了那么多,还是觉得我参加的北京尚学堂的教的好。包教包会,而且毕业就有1W的工资在手。一起来学习吧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-10-30 10:51
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    34

    帖子

    78

    积分

    普通会员

    Rank: 2

    积分
    78
    发表于 2016-10-30 12:24:00 | 显示全部楼层
    java自学网给力 亲测资源可以
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2025-4-1 14:40 , Processed in 0.465277 second(s), 28 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表