有個空間

          有個標題

          lucene使用小記

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

          分析器

          內部操作步驟

          WhitespaceAnalyzer

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

          SimpleAnalyzer

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

          StopAnalyzer

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

          StandardAnalyzer

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



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



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

          主站蜘蛛池模板: 平邑县| 广州市| 九江市| 监利县| 景东| 弋阳县| 石台县| 菏泽市| 额济纳旗| 罗源县| 黄浦区| 正宁县| 宁明县| 中宁县| 抚远县| 漯河市| 梁平县| 穆棱市| 许昌市| 武定县| 隆昌县| 陕西省| 北海市| 鹤壁市| 富阳市| 克拉玛依市| 宝清县| 宣威市| 静乐县| 霍城县| 内黄县| 平安县| 怀宁县| 蓝山县| 大丰市| 射洪县| 准格尔旗| 南木林县| 高雄市| 宝清县| 高阳县|