<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 分析你的文本 <div style="text-indent:2em;"> <p>問題到這里就變得稍微復雜了一些。傳入到Document中的數據是如何轉變成倒排索引的?查詢語句是如何轉換成一個個Term使高效率文本搜索變得可行?這種轉換數據的過程就稱為文本分析(analysis)</p> <br/> <p>文本分析工作由<b>analyzer</b>組件負責。analyzer由一個分詞器(tokenizer)和0個或者多個過濾器(filter)組成,也可能會有0個或者多個字符映射器(character mappers)組成。</p> <p>Lucene中的<b>tokenizer</b>用來把文本拆分成一個個的Token。Token包含了比較多的信息,比如Term在文本的中的位置及Term原始文本,以及Term的長度。文本經過<b>tokenizer</b>處理后的結果稱為token stream。token stream其實就是一個個Token的順序排列。token stream將等待著filter來處理。</p> <br/> <p>除了<b>tokenizer</b>外,Lucene的另一個重要組成部分就是filter鏈,filter鏈將用來處理Token Stream中的每一個token。這些處理方式包括刪除Token,改變Token,甚至添加新的Token。Lucene中內置了許多filter,讀者也可以輕松地自己實現一個filter。有如下內置的filter: <ul> <li><b>Lowercase filter</b>:把所有token中的字符都變成小寫</li> <li><b>ASCII folding filter</b>:去除tonken中非ASCII碼的部分</li> <li><b>Synonyms filter</b>:根據同義詞替換規則替換相應的token</li> <li><b>Multiple language-stemming filters</b>:把Token(實際上是Token的文本內容)轉化成詞根或者詞干的形式。</li> </ul> </p> <p>所以通過Filter可以讓analyzer有幾乎無限的處理能力:因為新的需求添加新的Filter就可以了。</p> <h3>索引和查詢</h3> <br/> <p>在我們用Lucene實現搜索功能時,也許會有讀者不明覺歷:上述的原理是如何對索引過程和搜索過程產生影響?</p> <br/> <p>索引過程:Lucene用用戶指定好的analyzer解析用戶添加的Document。當然Document中不同的Field可以指定不同的analyzer。如果用戶的Document中有<span style="font-family:COURIER">title</span>和<span style="font-family:COURIER">description</span>兩個Field,那么這兩個Field可以指定不同的analyzer。</p> <p>搜索過程:用戶的輸入查詢語句將被選定的查詢解析器(query parser)所解析,生成多個Query對象。當然用戶也可以選擇不解析查詢語句,使查詢語句保留原始的狀態。在ElasticSearch中,有的Query對象會被解析(analyzed),有的不會,比如:前綴查詢(prefix query)就不會被解析,精確匹配查詢(match query)就會被解析。對用戶來說,理解這一點至關重要。</p> <p>對于索引過程和搜索過程的數據解析這一環節,我們需要把握的重點在于:倒排索引中詞應該和查詢語句中的詞正確匹配。如果無法匹配,那么Lucene也不會返回我們喜聞樂見的結果。舉個例子:如果在索引階段對文本進行了轉小寫(lowercasing)和轉變成詞根形式(stemming)處理,那么查詢語句也必須進行相同的處理,不然就搜索結果就會是竹籃打水——一場空。</p> </div>
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看