<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Lucene表達式語言 原文鏈接 : [https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-expression.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-expression.html) 譯文鏈接 : [http://www.apache.wiki/pages/viewpage.action?pageId=9405371](http://www.apache.wiki/pages/viewpage.action?pageId=9405371) 貢獻者 : [阿叩](/display/~luanqing),[ApacheCN](/display/~apachecn),[Apache中文網](/display/~apachechina) MarkDown文件:[Lucene Expressions Language.md](https://github.com/aqlu/elasticsearch-reference-cn/blob/master/Modules/Scripting/Lucene_Expressions_Language.md) ## Lucene表達式語言 Lucene表達式把一個`javascript`表達式編譯成字節碼。它們是專為高性能的自定義評分和排序功能設計的,默認情況下啟用`inline(內聯)`和`stored(存儲)`腳本。 ## 性能 通過定制Lucene代碼, 表達式被設計得具有不錯競爭力的性能。與其他腳本引擎相比,它具有較低的每個文檔開銷:表達式在“前期”做了更多的事情。 它允許快速執行,甚至比你寫一個`native`腳本。 ## 語法 表達式支持javascript語法的子集:一個單一的表達。 更多操作符與函數的可用信息,請參閱[apache lucene表達式模塊文檔](http://lucene.apache.org/core/6_0_0/expressions/index.html?org/apache/lucene/expressions/js/package-summary.html)。 表達式腳本中變量可以訪問: * 文檔字段,如:`doc['myfield'].value` * 變量和方法的支持,如:`doc['myfield'].empty` * 參數傳遞到腳本,如:`mymodifier` * 當前文檔的分數,`_score`(僅適用于在使用`script_score`時) 您可以在`script_score`、`script_fields`、腳本排序、數字型字段的腳本聚合等場景中使用表達式腳本,簡單地設置下表達式語言參數就行。 ## 數字類型字段API | 表達式 | 描述 | | --- | --- | | doc['field_name'].value | 該字段的值,double類型 | | doc['field_name'].empty | 該字段是否有值,返回true/false | | doc['field_name'].length | 該字段值的本文長度 | | doc['field_name'].min() | 本文檔中此字段的最小值 | | doc['field_name'].max() | 本文檔中此字段的最大值 | | doc['field_name'].median() | 本文檔中此字段的中間值 | | doc['field_name'].avg() | 本文檔中此字段的平均值 | | doc['field_name'].sum() | 本文檔中此字段的總和 | 如果文檔中缺失這個字段,默認將按值為`0`來處理。你也可以用其它默認值來處理,譬如通過表達式:`doc['myfield'].empty ? 100 : doc['myfield'].value` 如果文檔中這個字段有多個值,默認情況下最小的值被返回。您可以選擇不同的值來代替,譬如返回這個字段的和:`doc['myfield'].sum()` 如果文檔中缺失這個字段,默認值將被視為`0`。 布爾類型字段如果被拿來當數字字段進行計算時,`true`將被映射為`1`,`false`將被映射為`0`。例如:`doc['on_sale'].value ? doc['price'].value * 0.5 : doc['price'].value` ## 日期類型字段API 日期類型的字段會被按照自1970年1月1日起的毫秒數,完全支持上面的數字類型字段API。以及下面一些特定的日期字段運算: | 表達式 | 描述 | | --- | --- | | doc['field_name'].date.centuryOfEra | 當前世紀(1-2920000) | | doc['field_name'].date.dayOfMonth | 當前月中的第幾天(1-31),例如:1表示在當月中的第一天。 | | doc['field_name'].date.dayOfWeek | 當前周中的第幾天(1-7)天,例如:1表示星期一。 | | doc['field_name'].date.dayOfYear | 當前年中的第幾天,例如:1表示1月1日。 | | doc['field_name'].date.era | 時代,0表示公元前,1表示公元。 | | doc['field_name'].date.hourOfDay | 小時(0-23)。 | | doc['field_name'].date.millisOfDay | 當前天中的第幾毫秒數(0-86399999。 | | doc['field_name'].date.millisOfSecond | 當前秒鐘的第幾毫秒(0-999)。 | | doc['field_name'].date.minuteOfDay | 當前天中的第幾分鐘(0-1439)。 | | doc['field_name'].date.minuteOfHour | 當前小時中的第幾分鐘(0-59)。 | | doc['field_name'].date.monthOfYear | 當前年中的第幾個月(1-12),例如:1表示一月。 | | doc['field_name'].date.secondOfDay | 當前天中的第幾秒(0-86399)。 | | doc['field_name'].date.secondOfMinute | 當前分中的第幾秒(0-59)。 | | doc['field_name'].date.year | 年(-292000000 - 2.92億)。 | | doc['field_name'].date.yearOfCentury | 當前世紀中的第幾年(1-100)。 | | doc['field_name'].date.yearOfEra | 當前時代中的第幾年(1-292000000)。 | 下面的例子展示了如何計算`date1`與`date0`字段相差幾年: `doc['date1'].date.year - doc['date0'].date.year` ## 地理點(geo)類型字段API | 表達式 | 描述 | | --- | --- | | doc['field_name'].empty | 該字段是否有值,返回true/false | | doc['field_name'].lat | 地理點的緯度。 | | doc['field_name'].lon | 地理點的經度。 | 下面的例子展示了計算`field_name`字段值到華盛頓有多少公里: `haversin(38.9072, 77.0369, doc['field_name'].lat, doc['field_name'].lon)` 在這個例子中的坐標可能被作為參數傳遞給腳本,例如: 用戶的當前地理位置。 ## 限制 相對于其他腳本語言的一些限制: * 只有數字、布爾、日期和地理點類型的字段可以被訪問; * 存儲字段(Stored fields)不可用
                  <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>

                              哎呀哎呀视频在线观看