越近越好

鉴于一个短语查询仅仅排除了不包含确切查询短语的文档, 而 邻近查询 — 一个 slop 大于 0— 的短语查询将查询词条的邻近度考虑到最终相关度 _score 中。 通过设置一个像 50 或者 100 这样的高 slop 值, 你能够排除单词距离太远的文档, 但是也给予了那些单词临近的的文档更高的分数。

下列对 quick dog 的邻近查询匹配了同时包含 quickdog 的文档, 但是也给了与 quick 和 dog 更加临近的文档更高的分数 :

  1. POST /my_index/my_type/_search
  2. {
  3. "query": {
  4. "match_phrase": {
  5. "title": {
  6. "query": "quick dog",
  7. "slop": 50 <1>
  8. }
  9. }
  10. }
  11. }

<1> 注意高 slop 值。

  1. {
  2. "hits": [
  3. {
  4. "_id": "3",
  5. "_score": 0.75, <1>
  6. "_source": {
  7. "title": "The quick brown fox jumps over the quick dog"
  8. }
  9. },
  10. {
  11. "_id": "2",
  12. "_score": 0.28347334, <2>
  13. "_source": {
  14. "title": "The quick brown fox jumps over the lazy dog"
  15. }
  16. }
  17. ]
  18. }

<1> 分数较高因为 quickdog 很接近

<2> 分数较低因为 quickdog 分开较远