<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MDA/MDD/TDD/DDD/DDDDDDD
    posts - 536, comments - 111, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    lucene筆記

    Posted on 2008-03-27 16:15 leekiang 閱讀(852) 評論(0)  編輯  收藏 所屬分類: lucene
    1,Field.Store與Field.Index
    ? Field.Store.COMPRESS:用壓縮的格式存儲最初的Field值
    ? Field.Store.NO:不存儲該Field的原始值
    ? Field.Store.YES:存儲該Field的原始值

    ? Field.Index.NO:不索引Field的值
    ? Field.Index.NO_NORMS:
    ? Field.Index.TOKENIZED:作分詞處理
    ? Field.Index.UN_TOKENIZED:不分詞,直接作為完整的信息段檢索,可以支持全匹配和相似匹配,跟數(shù)據(jù)庫中的like很類似。

    2,實現(xiàn)Filter接口
    ????public?BitSet?bits(IndexReader?reader)?throws?IOException?{
    ????????
    final?BitSet?bits?=?new?BitSet(reader.maxDoc());//?默認所有都為false
    ????????
    //?設(shè)置所有的都不能檢索到
    ????????
    //?bits.set(0,?bits.size()?-?1,?false);
    ????????bits.set(3,?true);
    ????????bits.set(
    4);//設(shè)置為true
    ????????int[]?docs?=?new?int[1000];
    ????????
    int[]?freqs?=?new?int[1000];
    ????????TermDocs?termDocs?
    =?reader.termDocs(new?Term("title",?"測試"));
    ????????
    int?count?=?termDocs.read(docs,?freqs);//
    ????????for?(int?i?=?0;?i?<?docs.length;?i++)?{
    ????????????System.out.println(docs[i]
    +"--"+freqs[i]);
    ????????????bits.set(docs[i]);
    ????????}
    ????????
    return?bits;
    ????}

    3,Term t = new Term("content", "電力");
    ? Query query = new TermQuery(t);
    ? 以上搜不到結(jié)果.原因是"電力"不是一個Term,用"電"或"力"則可以。

    4,reader.terms()返回索引中的所有term,沒有重復(fù)。而TermDocs存放term關(guān)聯(lián)的Doc
    TermEnum?enumerator?=?reader.terms();
    while?(enumerator.next())?{
    Term?term?
    =?enumerator.term();
    System.out.println(term.field()?
    +?"?"?+?term.text());
    }

    5,lucene不支持中文的*? ?匹配 ?
    ? 因為英文是基于詞的, 中文是基于字的 ?
    ? 英文mo?ey可以匹配到money ,因為money是一個term,? 中文怎么辦?除非中文有個好的分詞方案
    6,兩次過濾后,query對象的tostring:
    filtered(filtered(title:oracle content:oracle)->com.lucene.search.PrivilegeFilter@133d0fc)->com.lucene.search.CategoryFilter@dd5415
    7,Hyper Estraier是一個用C語言開發(fā)的全文檢索引擎,
    具有高速度,高穩(wěn)定性,高可擴展性?提供java,ruby的調(diào)用方法
    <迅速搭建全文搜索平臺——開源搜索引擎實戰(zhàn)教程>
    http://www.162cm.com/archives/date/2007/07/18

    8,Hits hits = searcher.search (filteredquery, new Sort("fieldname"));//可根據(jù)第二個參數(shù)進行排序
    int n=hits.id(2)? //參數(shù)是在hits中的下標,返回的結(jié)果是在過濾和排序之前在directory中的原始下標

    9,
    new一個BitSet(950)并不等于建立一個950大小的bs
    只是說構(gòu)建出來的bs初始大小至少能容納950個bit,大小永遠是系統(tǒng)控制的。而且他的大小是64的倍數(shù),就算BitSet(1),他的大小也是64。
    bitset.set(1, 4) 設(shè)置的是1,2,3,沒有4

    10,對Field再進行切詞就是Term?Term和Token的區(qū)別

    11,BooleanQuery的例子:
    ????? BooleanQuery bq = new BooleanQuery();
    ??? ? Query q1 = new TermQuery (new Term ("field", "one"));
    ??? ? Query q2 = new TermQuery (new Term ("sorter", "b"));
    ??? ? bq.add(q1, Occur.MUST);
    ??? ? bq.add(q2, Occur.MUST);
    ??? ? Hits hits = searcher.search(bq);
    ??? ?
    ?12,可用RAMDirectory作測試,見lucene自帶的測試
    ??? RAMDirectory directory = new RAMDirectory();
    ??? IndexWriter writer = new IndexWriter (directory, new WhitespaceAnalyzer(), true)
    ???
    13,進行過濾時如果有多個filter,則某個doc是否能查到取決于這多個filter各自返回的bitset的綜合結(jié)果:要查得某一位置的doc,所有的filter的該位必須全部為true。所以查詢結(jié)果與filter的先后順序無關(guān)。

    14,--按user為tom進行過濾
    ??? Filter f1 = new Filter() {
    ??? ??? ??? public BitSet bits(IndexReader reader) throws IOException {
    ??? ??? ??? ??? BitSet bitset = new BitSet(reader.maxDoc());
    ??? ??? ??? ??? TermDocs termDocs = reader.termDocs();// 實際是SegmentTermDocs
    ??? ??? ??? ??? Term term = new Term("user", "tom");
    ??? ??? ??? ??? termDocs.seek(term);//相當于持有了所有含有user為tom的doc的集合,但freq()和doc()還需要去文件中讀取?
    ??? ??? ??? ??? while (termDocs.next()) {
    ??? ??? ??? ??? ??? System.out.println("freq:"+termDocs.freq());
    ??? ??? ??? ??? ??? bitset.set(termDocs.doc());
    ??? ??? ??? ??? }
    ??? ??? ??? ??? return bitset;
    ??? ??? ??? }
    ??? ??? };

    15,Trie,又稱單詞查找樹,是一種特殊的樹形結(jié)構(gòu),用于保存大量的字符串。它的優(yōu)點是:利用字符串的公共前綴來節(jié)約存儲空間。
    http://www.javaeye.com/topic/299826

    16,
    doc相當于表中的記錄
    field相當于字段
    不同的doc可能有相同的field,也可能有不一樣的
    我感覺比較適合用json格式存儲
    field+分詞的關(guān)鍵字=term,是唯一的
    term出現(xiàn)在哪些doc中,索引文件里有記載?
    用Luke(http://code.google.com/p/luke)可以查看索引文件詳細信息
    ?
    主站蜘蛛池模板: 亚洲精品一级无码中文字幕| 亚洲色av性色在线观无码| 国产一二三四区乱码免费| 亚洲av片劲爆在线观看| 毛片免费在线视频| 91av免费在线视频| 亚洲精品网站在线观看你懂的 | 成年性午夜免费视频网站不卡| 国产精品亚洲专一区二区三区| 国产亚洲美女精品久久久久狼 | 亚洲爆乳无码一区二区三区| 无码少妇一区二区浪潮免费| 好男人资源在线WWW免费| 久久精品国产亚洲AV蜜臀色欲| 亚洲综合色成在线播放| 日韩吃奶摸下AA片免费观看| 一区二区免费电影| 亚洲深深色噜噜狠狠网站| 亚洲国产另类久久久精品| 麻豆成人精品国产免费| 99久9在线|免费| 亚洲精品视频免费观看| 亚洲日产乱码一二三区别 | 亚洲熟妇久久精品| 久久精品国产精品亚洲艾草网| 韩国18福利视频免费观看| 免费观看91视频| 美美女高清毛片视频黄的一免费 | 大香人蕉免费视频75| 国产猛男猛女超爽免费视频| 爱情岛亚洲论坛在线观看 | 亚欧乱色国产精品免费视频| 亚洲中文字幕乱码一区| 亚洲视频免费在线观看| 亚洲情a成黄在线观看| 免费被黄网站在观看| 16女性下面扒开无遮挡免费| 视频免费在线观看| 免费人成再在线观看网站| 亚洲精品无码专区| 亚洲成a人片在线观看中文!!!|