Elasticsearch查询时间提升导致顺序不足的结果

one two

three应用boost每个关键字的功能后,给定搜索关键字的ES搜索结果似乎错误。请帮助我修改我的“错误”查询,以完成下文所述的“预期结果”。我在使用LUCENE

*

- three被认为是最重要的关键字

word - boost

---- -----

one 1

two 2

three 3

- 仅显示MySQL转储以使发布更短

mysql> SELECT id, title FROM post;

+----+-------------------+

| id | title |

+----+-------------------+

| 1 | one |

| 2 | two |

| 3 | three |

| 4 | one two |

| 5 | one three |

| 6 | one two three |

| 7 | two three |

| 8 | none |

| 9 | one abc |

| 10 | two abc |

| 11 | three abc |

| 12 | one two abc |

| 13 | one two three abc |

| 14 | two three abc |

+----+-------------------+

14 rows in set (0.00 sec)

- 用户正在搜索one two three我对记分相同的记录的顺序并不感到困惑。

我的意思是,如果记录6和13切换位置,我不在乎。

+----+-------------------+

| id | title | my scores for demonstration purposes

+----+-------------------+

| 6 | one two three | (1+2+3 = 6)

| 13 | one two three abc | (1+2+3 = 6)

| 7 | two three | (2+3 = 5)

| 14 | two three abc | (2+3 = 5)

| 5 | one three | (1+3 = 4)

| 4 | one two | (1+2 = 3)

| 12 | one two abc | (1+2 = 3)

| 3 | three | (3 = 3)

| 11 | three abc | (3 = 3)

| 2 | two | (2 = 2)

| 10 | two abc | (2 = 2)

| 1 | one | (1 = 1)

| 9 | one abc | (1 = 1)

| 8 | none | <- This shouldn't appear

+----+-------------------+

14 rows in set (0.00 sec)

- 不幸的是,这就是我得到的。

+----+-------------------+

| id | title | _score

+----+-------------------+

| 6 | one two three | 1.0013864

| 13 | one two three abc | 1.0013864

| 4 | one two | 0.57794875

| 3 | three | 0.5310148

| 7 | two three | 0.50929534

| 5 | one three | 0.503356

| 14 | two three abc | 0.4074363

| 11 | three abc | 0.36586377

| 12 | one two abc | 0.30806428

| 10 | two abc | 0.23231897

| 2 | two | 0.12812772

| 1 | one | 0.084527075

| 9 | one abc | 0.07408653

+----+-------------------+

curl -XPOST "http://127.0.0.1:9200/_search?post_dev" -d'

{

"query": {

"bool": {

"must": {

"match": {

"title": {

"query": "one two three"

}

}

},

"should": [

{

"match": {

"title": {

"query": "one",

"boost": 1

}

}

},

{

"match": {

"title": {

"query": "two",

"boost": 2

}

}

},

{

"match": {

"title": {

"query": "three",

"boost": 3

}

}

}

]

}

},

"sort": [

{

"_score": {

"order": "desc"

}

}

],

"from": "0",

"size": "100"

}'

其他一些测试查询:

  • 该查询不会产生任何结果。
  • 此查询不正确顺序似乎在这里。

回答:

# Index some test data

curl -XPUT "localhost:9200/test/doc/1" -d '{"title": "one"}'

curl -XPUT "localhost:9200/test/doc/2" -d '{"title": "two"}'

curl -XPUT "localhost:9200/test/doc/3" -d '{"title": "three"}'

curl -XPUT "localhost:9200/test/doc/4" -d '{"title": "one two"}'

curl -XPUT "localhost:9200/test/doc/5" -d '{"title": "one three"}'

curl -XPUT "localhost:9200/test/doc/6" -d '{"title": "one two three"}'

curl -XPUT "localhost:9200/test/doc/7" -d '{"title": "two three"}'

curl -XPUT "localhost:9200/test/doc/8" -d '{"title": "none"}'

curl -XPUT "localhost:9200/test/doc/9" -d '{"title": "one abc"}'

curl -XPUT "localhost:9200/test/doc/10" -d '{"title": "two abc"}'

curl -XPUT "localhost:9200/test/doc/11" -d '{"title": "three abc"}'

curl -XPUT "localhost:9200/test/doc/12" -d '{"title": "one two abc"}'

curl -XPUT "localhost:9200/test/doc/13" -d '{"title": "one two three abc"}'

curl -XPUT "localhost:9200/test/doc/14" -d '{"title": "two three abc"}'

# Make test data available for search

curl -XPOST "localhost:9200/test/_refresh?pretty"

# Search using function score

curl -XPOST "localhost:9200/test/doc/_search?pretty" -d'{

"query": {

"function_score": {

"query": {

"match": {

"title": "one two three"

}

},

"functions": [

{

"filter": {

"query": {

"match": {

"title": "one"

}

}

},

"weight": 1

},

{

"filter": {

"query": {

"match": {

"title": "two"

}

}

},

"weight": 2

},

{

"filter": {

"query": {

"match": {

"title": "three"

}

}

},

"weight": 3

}

],

"score_mode": "sum",

"boost_mode": "replace"

}

},

"sort": [

{

"_score": {

"order": "desc"

}

}

],

"from": "0",

"size": "100"

}'

以上是 Elasticsearch查询时间提升导致顺序不足的结果 的全部内容, 来源链接: utcz.com/qa/404715.html

回到顶部