为什么 elasticsearch 计算术语查询的分数?
why does elasticsearch calculates score for term queries?
我想基于使用术语查询了解唯一字段值来进行简单查询。例如:
{
"query": {
"term": {
"products.product_id": {
"value": "Ubsdf-234kjasdf"
}
}
}
}
关于 term queries
,Elasticsearch 文档指出:
Returns documents that contain an exact term in a provided field.
You can use the term query to find documents based on a precise value such as a price, a product ID, or a username.
另一方面,文档还表明 _score
是针对相关性很重要的查询计算的(对于涉及 完全匹配 的过滤器上下文则不是这种情况) ).
我觉得有点混乱。为什么 Elasticsearch 为本应与 完全匹配 而不是相关性有关的术语查询计算 _score
?
Filter context 意味着您需要将术语查询包装在 bool/filter
查询中,如下所示:
{
"query": {
"bool": {
"filter": {
"term": {
"products.product_id": {
"value": "Ubsdf-234kjasdf"
}
}
}
}
}
}
以上查询不会计算分数。
不分析术语查询,因此它们不会进入分析阶段,因此用于精确匹配,但在查询上下文中使用时仍会计算它们的分数。
当您在过滤器上下文中使用术语查询时,这意味着您不是在搜索它们,而是在过滤它们,因此没有为它们计算分数。
有关 query and filter context in official ES doc 的更多信息。
我下面的示例中显示的过滤器和查询上下文中的术语查询示例
查询上下文中的术语查询
{
"query": {
"bool": {
"must": [
{
"term": {
"title": "c"
}
}
]
}
},
"size": 10
}
结果得分
"hits": [
{
"_index": "cpp",
"_type": "_doc",
"_id": "4",
"_score": 0.2876821, --> notice score is calculated
"_source": {
"title": "c"
}
}
]
过滤器上下文中的术语查询
{
"query": {
"bool": {
"filter": [ --> prev cluase replaced by `filter`
{
"term": {
"title": "c"
}
}
]
}
},
"size": 10
}
以及带过滤上下文的搜索结果
"hits": [
{
"_index": "cpp",
"_type": "_doc",
"_id": "4",
"_score": 0.0, --> notice score is 0.
"_source": {
"title": "c"
}
}
]
我想基于使用术语查询了解唯一字段值来进行简单查询。例如:
{
"query": {
"term": {
"products.product_id": {
"value": "Ubsdf-234kjasdf"
}
}
}
}
关于 term queries
,Elasticsearch 文档指出:
Returns documents that contain an exact term in a provided field. You can use the term query to find documents based on a precise value such as a price, a product ID, or a username.
另一方面,文档还表明 _score
是针对相关性很重要的查询计算的(对于涉及 完全匹配 的过滤器上下文则不是这种情况) ).
我觉得有点混乱。为什么 Elasticsearch 为本应与 完全匹配 而不是相关性有关的术语查询计算 _score
?
Filter context 意味着您需要将术语查询包装在 bool/filter
查询中,如下所示:
{
"query": {
"bool": {
"filter": {
"term": {
"products.product_id": {
"value": "Ubsdf-234kjasdf"
}
}
}
}
}
}
以上查询不会计算分数。
不分析术语查询,因此它们不会进入分析阶段,因此用于精确匹配,但在查询上下文中使用时仍会计算它们的分数。
当您在过滤器上下文中使用术语查询时,这意味着您不是在搜索它们,而是在过滤它们,因此没有为它们计算分数。
有关 query and filter context in official ES doc 的更多信息。
我下面的示例中显示的过滤器和查询上下文中的术语查询示例
查询上下文中的术语查询
{
"query": {
"bool": {
"must": [
{
"term": {
"title": "c"
}
}
]
}
},
"size": 10
}
结果得分
"hits": [
{
"_index": "cpp",
"_type": "_doc",
"_id": "4",
"_score": 0.2876821, --> notice score is calculated
"_source": {
"title": "c"
}
}
]
过滤器上下文中的术语查询
{
"query": {
"bool": {
"filter": [ --> prev cluase replaced by `filter`
{
"term": {
"title": "c"
}
}
]
}
},
"size": 10
}
以及带过滤上下文的搜索结果
"hits": [
{
"_index": "cpp",
"_type": "_doc",
"_id": "4",
"_score": 0.0, --> notice score is 0.
"_source": {
"title": "c"
}
}
]