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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 最佳字段查詢的調優 如果用戶((("multifield search", "best fields queries", "tuning")))((("best fields queries", "tuning")))搜索的是"quick pets",那么會發生什么呢?兩份文檔都包含了單詞quick,但是只有文檔2包含了單詞pets。兩份文檔都沒能在一個字段中同時包含搜索的兩個單詞。 一個像下面那樣的簡單dis_max查詢會選擇出擁有最佳匹配字段的查詢子句,而忽略其他的查詢子句: ```Javascript { "query": { "dis_max": { "queries": [ { "match": { "title": "Quick pets" }}, { "match": { "body": "Quick pets" }} ] } } } ``` // SENSE: 110_Multi_Field_Search/15_Best_fields.json ```Javascript { "hits": [ { "_id": "1", "_score": 0.12713557, <1> "_source": { "title": "Quick brown rabbits", "body": "Brown rabbits are commonly seen." } }, { "_id": "2", "_score": 0.12713557, <1> "_source": { "title": "Keeping pets healthy", "body": "My quick brown fox eats rabbits on a regular basis." } } ] } ``` <1> 可以發現,兩份文檔的分值是一模一樣的。 我們期望的是同時匹配了title字段和body字段的文檔能夠擁有更高的排名,但是結果并非如此。需要記住:dis_max查詢只是簡單的使用最佳匹配查詢子句得到的_score。 #### tie_breaker 但是,將其它匹配的查詢子句考慮進來也是可能的。通過指定tie_breaker參數: ```Javascript { "query": { "dis_max": { "queries": [ { "match": { "title": "Quick pets" }}, { "match": { "body": "Quick pets" }} ], "tie_breaker": 0.3 } } } ``` // SENSE: 110_Multi_Field_Search/15_Best_fields.json 它會返回以下結果: ```Javascript { "hits": [ { "_id": "2", "_score": 0.14757764, <1> "_source": { "title": "Keeping pets healthy", "body": "My quick brown fox eats rabbits on a regular basis." } }, { "_id": "1", "_score": 0.124275915, <1> "_source": { "title": "Quick brown rabbits", "body": "Brown rabbits are commonly seen." } } ] } ``` <1> 現在文檔2的分值比文檔1稍高一些。 tie_breaker參數會讓dis_max查詢的行為更像是dis_max和bool的一種折中。它會通過下面的方式改變分值計算過程: * 1.取得最佳匹配查詢子句的_score。 * 2.將其它每個匹配的子句的分值乘以tie_breaker。 * 3.將以上得到的分值進行累加并規范化。 通過tie_breaker參數,所有匹配的子句都會起作用,只不過最佳匹配子句的作用更大。 > 提示:tie_breaker的取值范圍是0到1之間的浮點數,取0時即為僅使用最佳匹配子句(譯注:和不使用tie_breaker參數的dis_max查詢效果相同),取1則會將所有匹配的子句一視同仁。它的確切值需要根據你的數據和查詢進行調整,但是一個合理的值會靠近0,(比如,0.1 -0.4),來確保不會壓倒dis_max查詢具有的最佳匹配性質。 <!-- === Tuning Best Fields Queries What would happen if the user((("multifield search", "best fields queries", "tuning")))((("best fields queries", "tuning"))) had searched instead for ``quick pets''? Both documents contain the word `quick`, but only document 2 contains the word `pets`. Neither document contains _both words_ in the _same field_. A simple `dis_max` query like the following would ((("dis_max (disjunction max) query")))((("relevance scores", "calculation in dis_max queries")))choose the single best matching field, and ignore the other: [source,js] -------------------------------------------------- { "query": { "dis_max": { "queries": [ { "match": { "title": "Quick pets" }}, { "match": { "body": "Quick pets" }} ] } } } -------------------------------------------------- // SENSE: 110_Multi_Field_Search/15_Best_fields.json [source,js] -------------------------------------------------- { "hits": [ { "_id": "1", "_score": 0.12713557, <1> "_source": { "title": "Quick brown rabbits", "body": "Brown rabbits are commonly seen." } }, { "_id": "2", "_score": 0.12713557, <1> "_source": { "title": "Keeping pets healthy", "body": "My quick brown fox eats rabbits on a regular basis." } } ] } -------------------------------------------------- <1> Note that the scores are exactly the same. We would probably expect documents that match on both the `title` field and the `body` field to rank higher than documents that match on just one field, but this isn't the case. Remember: the `dis_max` query simply uses the `_score` from the _single_ best-matching clause. ==== tie_breaker It is possible, however, to((("dis_max (disjunction max) query", "using tie_breaker parameter")))((("relevance scores", "calculation in dis_max queries", "using tie_breaker parameter"))) also take the `_score` from the other matching clauses into account, by specifying ((("tie_breaker parameter")))the `tie_breaker` parameter: [source,js] -------------------------------------------------- { "query": { "dis_max": { "queries": [ { "match": { "title": "Quick pets" }}, { "match": { "body": "Quick pets" }} ], "tie_breaker": 0.3 } } } -------------------------------------------------- // SENSE: 110_Multi_Field_Search/15_Best_fields.json This gives us the following results: [source,js] -------------------------------------------------- { "hits": [ { "_id": "2", "_score": 0.14757764, <1> "_source": { "title": "Keeping pets healthy", "body": "My quick brown fox eats rabbits on a regular basis." } }, { "_id": "1", "_score": 0.124275915, <1> "_source": { "title": "Quick brown rabbits", "body": "Brown rabbits are commonly seen." } } ] } -------------------------------------------------- <1> Document 2 now has a small lead over document 1. The `tie_breaker` parameter makes the `dis_max` query behave more like a halfway house between `dis_max` and `bool`. It changes the score calculation as follows: 1. Take the `_score` of the best-matching clause. 2. Multiply the score of each of the other matching clauses by the `tie_breaker`. 3. Add them all together and normalize. With the `tie_breaker`, all matching clauses count, but the best-matching clause counts most. [NOTE] ==== The `tie_breaker` can be a floating-point value between `0` and `1`, where `0` uses just the best-matching clause((("tie_breaker parameter", "value of"))) and `1` counts all matching clauses equally. The exact value can be tuned based on your data and queries, but a reasonable value should be close to zero, (for example, `0.1 - 0.4`), in order not to overwhelm the best-matching nature of `dis_max`. ==== -->
                  <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>

                              哎呀哎呀视频在线观看