有個空間

          有個標題

          lucene使用小記

          幾點小體會,先記下,不知道對不對。
          網(wǎng)上說lucene是一個半成品,深有體會。
              1.lucene是一種全文搜索技術,詞元是一個單詞(word)。試圖搜索一個單詞的一部分或一個字母,是沒有意義的,lucene也不能實現(xiàn)。除非你是想搜索一個單詞的前綴,用PrefixQuery是可以的。說到底,還是在生成索引的時候的分析器(Analyzer)在作怪。
              下面有四個英文分析器:

          分析器

          內(nèi)部操作步驟

          WhitespaceAnalyzer

          在空格處進行語匯單元的切分

          SimpleAnalyzer

          在非字母字符處切分文本,并將其轉(zhuǎn)換為小寫形式

          StopAnalyzer

          在非字母字符處切分文本,然后小寫化,再移除停用詞

          StandardAnalyzer

          基于復雜的語法來實現(xiàn)語匯單元化;這種語法規(guī)則可以識別e-mail地址、首字母縮寫詞、漢語-日語-漢語字符、字母數(shù)字等;小寫化;并移除停用詞



              切分出來的就是一個一個詞元,也就是你搜索的最小單位了。不難從上面看出,lucene對亞洲字體支持有限。
              2.試過用StandardAnalyzer分析日文英文文本。日文可以正常搜索,英文字母只能按單詞搜索。
              3.這里說一個奇怪的現(xiàn)象:搜索的時候,比如文本中有"你好bcc",我搜"好bcc"可以正常搜索,搜"好a"竟然也可以搜到。debug代碼,看到查詢的時候,有一個parse方法(下面說明)竟然把后面的"a"去掉了,真正搜的是"好"。但是搜"好b"或"好d"等都搜不到。奇怪奇怪!
              4.索引好之后,就可以搜索(Query)了。至于Query也有好多種:
               |_______WildcardQuery         (通配符查詢)
               |_______PhraseQuery      (短語查詢) 可以限定兩個term之間的距離
               |_______RangeQuery            (范圍查詢)
               |_______MultiPhraseQuery    (多短語查詢)
               |_______FuzzyQuery            (模糊查詢)
               |_______SpanQuery              (跨度查詢)
               |_______PrefixQuery             (前綴查詢)
              查詢的時候,也會用到上面的Analyzer。根據(jù)Analyzer的不同會對查詢的關鍵詞進行一些處理,比如上面的去掉"a"。然后用處理過的關鍵詞進行查詢。
              5.這里再說一個題外話:什么時候生成索引合適。總不能每次檢索的時候就來一次從頭到尾的生成索引吧,這顯然不合人類工程動力學原理,呵呵:) 那初步想法是,先確定你要在那里文件里面搜索,每當你的這些文件有變動時,就觸發(fā)對這個文件的索引。比如,新添文件或文件更新了。這樣檢索的時候,就只管檢索。看似這樣耦合度也低哈:)



          posted on 2009-10-22 16:34 游雯 閱讀(279) 評論(0)  編輯  收藏 所屬分類: Java技術

          主站蜘蛛池模板: 海原县| 吉水县| 固原市| 茌平县| 石门县| 绥棱县| 枣阳市| 合山市| 汪清县| 枝江市| 瑞安市| 尚志市| 贺州市| 津市市| 清涧县| 九寨沟县| 剑阁县| 托里县| 浪卡子县| 仁怀市| 瑞金市| 双江| 仁寿县| 金川县| 上虞市| 彩票| 深圳市| 湖州市| 乡城县| 门源| 图们市| 通海县| 娱乐| 通河县| 宜黄县| 自贡市| 榕江县| 福贡县| 弥渡县| 独山县| 江北区|