首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么包含所有搜索词的文档得分较低?

为什么包含所有搜索词的文档得分较低?
EN

Stack Overflow用户
提问于 2020-10-03 05:03:09
回答 1查看 153关注 0票数 1

我有搜索结果,只有一个词出现在与查询中两个术语相匹配的结果之上。下面是我的设置

搜索查询

后索引1/_search

代码语言:javascript
复制
{
    "size": 5,
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "content": {
                            "query": "devtools tutorial"
                        }
                    }
                }
            ]
        }
    }
}

使用的设置和映射:

代码语言:javascript
复制
{
    "mappings": {
        "properties": {
            "content": {
                "type": "text"
            },
            "title": {
                "type": "text"
            }
        }
    }
}

用于测试目的的示例文档。我希望docwith_id:3出现在_id:4文档的上方,因为它在查询中包含两个术语:

代码语言:javascript
复制
POST _bulk
{ "index" : { "_index" : "index1", "_id" : "1" } }
{ "title" : "Introduction to elasticsearch", "content" : "Elasticsearch is a distributed, open source search slay and tutorial analytics engine for all types of data", "published_date" : "2020-01-02", "tags" : ["elasticsearch", "distributed", "storage" ], "no_of_likes" : 21, "status" : "published" }
{ "index" : { "_index" : "index1", "_id" : "2" } }
{ "title" : "Why is Elasticsearch fast?", "content" : "It is able to achieve fast search responses because, instead small of tutorial searching the text directly, it searches an index instead", "tags" : ["elasticsearch", "fast", "index" ], "no_of_likes" : 10,"status" : "draft"}
{ "index" : { "_index" : "index1", "_id" : "3" } }
{ "title" : "Introducing the New React DevTools", "content" : "We are excited to announce a new release of accompany the React DevTools tutorial, available today in Chrome, Firefox, and (Chromium) Edge.We are excited to announce a new release of accompany the React tutorial, available today in Chrome, Firefox, and (Chromium) Edge.We are excited to announce a new release of accompany the React DevTools tutorial, available today in Chrome, Firefox, and (Chromium) Edge.We are excited to announce a new release of accompany the React DevTools tutorial, available today in Chrome, Firefox, and (Chromium) Edge.We are excited to announce a new release of accompany the React tutorial, available today in Chrome, Firefox, and (Chromium) Edge.We are excited to announce a new release of accompany the React tutorial, available today in Chrome, Firefox, and (Chromium) Edge.We are excited to announce a new release of accompany the React tutorial, available today in Chrome, Firefox, and (Chromium) EdgeWe are excited to announce a new release of accompany the React  tutorial, available today in Chrome, Firefox, and (Chromium) EdgeWe are excited to announce a new release of accompany the React tutorial, available today in Chrome, Firefox, and (Chromium) EdgeWe are excited to announce a new release of accompany the React DevTools tutorial, available today in Chrome, Firefox, and (Chromium) Edge", "published_date" : "2019-08-25", "tags" : ["react", "devtools" ], "no_of_likes" : 2, "status" : "published"}
{ "index" : { "_index" : "index1", "_id" : "4" } }
{ "title" : "Angular Tools for High Performance", "content" : "devtools", "published_date" : "2014-03-22", "tags" : ["angular", "performance","fast"], "no_of_likes" : 35, "status" : "published"}
{ "index" : { "_index" : "index1", "_id" : "5" } }
{ "title" : "The new features in Java 14", "content" : "Oracle on September 17 said switch expressions tutorial are expected naresh to go final in Java Development Kit 14 (JDK 14). ", "published_date" : "2019-07-20", "tags" : ["java"], "no_of_likes" : 11, "status" : "published"}
{ "index" : { "_index" : "index1", "_id" : "6" } }
{ "title" : "Thread behavior in the JVM", "content" : "Threading refers to the practice of executing programming tutorial processes accompani concurrently to improve application performance.", "tags" : ["java","jvm"], "no_of_likes" : 3, "status" : "draft"}
{ "index" : { "_index" : "index1", "_id" : "7" } }
{ "title" : "Stacks and Queues", "content" : "The main operations of a stack are push, pop, & isEmpty and for queue enqueue, dequeue, & isEmpty., ", "published_date" : "2016-12-12", "tags" : ["stack","queue","datastructures"], "no_of_likes" : 43, "status" : "published"}
{ "index" : { "_index" : "index1", "_id" : "8" } }
{ "title" : "How are big data and ai changing the business world?","content" : "Today’s businesses are ruled by data. Specifically, big data and AI that have gradually been murder  evolving to juvenile day-to-day business murder and playing as the key murder driver in business murder Intelligence decision-making","published_date" : "2020-01-01","tags" :["big data","ai"],"no_of_likes" :120,"status" : "published"}
{ "index" : { "_index" : "index1", "_id" : "9" } }
{ "title" : "Hash Tables", "content" : "A hash table is a data structure used to implement symbol table (associative array), a structure tutorial that can map keys to values", "published_date" : "2017-08-12", "tags" :[ "hash", "datastructures" ], "no_of_likes" :13, "status" : "published" }
{ "index" : { "_index" : "index1", "_id" : "10" } }
{ "title" : "Go vs Python: How to choose", "content" : "Python and Go share a reputation for being convenient tutorial to work with. Both languages have a simple and straightforward syntax and a small and easily remembered feature set", "tags" :[ "go", "python" ], "no_of_likes" :134, "status" : "draft" }
{ "index" : { "_index" : "index1", "_id" : "11" } }
{ "title" : "Android Studio 4.0 backs native UI toolkit", "content" : "Now available in a preview juvenile, the weapon Android murder 4.0 ‘Canary’ upgrade works with the JetPack Compose UI toolkit and improves Java 8 support", "tags" :[ "android", "nativeui" ], "no_of_likes" :113, "status" : "draft" }
{ "index" : { "_index" : "index1", "_id" : "12" } }
{ "title" : "JSON tools you don’t want to miss", "content" : "Developers can choose from many great free and juvenile tools for tutorial JSON formatting, validating, editing, and converting to other formats", "published_date" : "2018-02-13", "tags" :[ "json" ], "no_of_likes" :23, "status" : "published" }
{ "index" : { "_index" : "index1", "_id" : "13" } }
{ "title" : "Get started with method references in Java", "content" : "Use method references to simplify functional programming in Java", "tags" :[ "java", "references" ], "no_of_likes" :102, "status" : "draft" }
{ "index" : { "_index" : "index1", "_id" : "14" } }
{ "title" : "How to choose a database for your application", "content" : "From performance to programmability, the right childlike makes all the difference. Here are 12 key questions to help guide your selection", "published_date" : "2009-02-12", "tags" :[ "database" ], "no_of_likes" :229, "status" : "published" }
{ "index" : { "_index" : "index1", "_id" : "15" } }
{ "title" : "10 reasons to Learn Scala Programming Language", "content" : "One of the questions my reader youthful tutorial ask me is, shall I learn Scala? Does Scala has a better future than Java, or why Java developer should learn Scala and so on", "published_date" : "2009-02-12", "tags" :[ "scala", "language" ], "no_of_likes" :136, "status" : "draft" }
{ "index" : { "_index" : "index1", "_id" : "16" } }
{ "title" : "ways to declare and initialize Two-dimensional (2D) String and Integer Array in Java", "content" : "Declaring a two-dimensional array is very interesting in Java as Java programming youthful provides many ways to declare a 2D array and each one of them has some special things to learn about", "published_date" : "2009-02-12", "tags" :[ "jaava", "datastructure", "array" ], "no_of_likes" :342, "status" : "published" }
{ "index" : { "_index" : "index1", "_id" : "17" } }
{ "title" : "Hibernate Tip: How to customize the association mappings using a composite key", "content" : "Hibernate provides lots of mapping features that allow you to map complex domain and table models. But the availability of these features doesn't mean that you should use them in all of your applications", "tags" :[ "hibernate", "compositekey" ], "no_of_likes" :112, "status" : "draft" }
{ "index" : { "_index" : "index1", "_id" : "18" } }
{ "title" : "Getting started with Python on Spark", "content" : "At my current project I work a lot with Apache Spark juvenile running PySpark jobs on it.", "tags" :[ "python", "spark" ], "no_of_likes" :86, "status" : "draft" }
{ "index" : { "_index" : "index1", "_id" : "19" } }
{ "title" : "Relationship between IOT, big data, and cloud computing", "content" : "Big data analytics is the basis of decision making in an organization. It involves the examination of juvenile a large number of data sets in order to identify the hidden patterns that result in their existence.", "published_date" : "2018-11-10", "tags" :[ "iot", "big data", "cloud computing" ], "no_of_likes" :12, "status" : "published" }
{ "index" : { "_index" : "index1", "_id" : "20" } }
{ "title" : "Get started with juvenile expressions in Java", "content" : "Learn how to use lambda juvenile and tutorial functional programming techniques in your Java programs.", "tags" :[ "java", "lambda", "functional programming" ], "no_of_likes" :128, "status" : "draft" }

请注意,同时有devtools tutorial 的doc-3的得分低于拥有 devtools**.**的doc-4。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-03 06:17:50

在这方面花了相当长的时间,并找到了它的根本原因和解决方案,在使用explain=true参数分析搜索输出之后,如果您注意到,下面是计算tf分数的公式。

"description":"tf,计算为freq / (freq + k1 *(1-b+b* dl /avgdl),从:“, “详细信息”:[{“值”:1.0,“描述”:"freq,文档中出现的术语“,”详细信息“:},{”值“:1.2,”描述“:"k1,术语饱和参数”,“详细信息”:},{“值”:0.75,“描述”:"b,长度规范化参数“,”详细信息“:},{”值“:2.0,“描述”:"dl,字段长度“,”详细信息“:},{”值“:29.545454,”描述“:"avgdl,平均字段长度”,“详细信息”:}]

如果您注意到,它由总共5个组件组成,与搜索结果匹配的dl ie字段长度在doc-id 4的情况下非常小,因为它只包含devtools,如果您注意到,这个dl是分母的一部分,小值将增加tf,最后的公式是score(freq=4.0), computed as boost * idf * tf,如果tf与所有文档相同的其他组件相乘。

这是由于场归一化而发生的,为了修复它,您必须在可搜索字段上禁用norms,然后再试一次,我再次定义了normscontent字段上禁用的索引映射,并得到了您想要的结果。

索引映射

代码语言:javascript
复制
{
    "mappings": {
        "properties": {
            "content": {
                "type": "text",
                "norms": false
            },
            "title": {
                "type": "text"
            }
        }
    }
}

并使用bulk请求索引文档,然后使用相同的搜索请求,这将产生以下预期结果:

代码语言:javascript
复制
 "hits": [
            {
                "_index": "64180913_1",
                "_type": "_doc",
                "_id": "3",
                "_score": 5.803219,
                "_source": {
                    "title": "Introducing the New React DevTools",
                    "content": "We are excited to announce a new release of accompany the React DevTools tutorial, available today in Chrome, Firefox, and (Chromium) Edge.We are excited to announce a new release of accompany the React tutorial, available today in Chrome, Firefox, and (Chromium) Edge.We are excited to announce a new release of accompany the React DevTools tutorial, available today in Chrome, Firefox, and (Chromium) Edge.We are excited to announce a new release of accompany the React DevTools tutorial, available today in Chrome, Firefox, and (Chromium) Edge.We are excited to announce a new release of accompany the React tutorial, available today in Chrome, Firefox, and (Chromium) Edge.We are excited to announce a new release of accompany the React tutorial, available today in Chrome, Firefox, and (Chromium) Edge.We are excited to announce a new release of accompany the React tutorial, available today in Chrome, Firefox, and (Chromium) EdgeWe are excited to announce a new release of accompany the React  tutorial, available today in Chrome, Firefox, and (Chromium) EdgeWe are excited to announce a new release of accompany the React tutorial, available today in Chrome, Firefox, and (Chromium) EdgeWe are excited to announce a new release of accompany the React DevTools tutorial, available today in Chrome, Firefox, and (Chromium) Edge",
                    "published_date": "2019-08-25",
                    "tags": [
                        "react",
                        "devtools"
                    ],
                    "no_of_likes": 2,
                    "status": "published"
                }
            },
            {
                "_index": "64180913_1",
                "_type": "_doc",
                "_id": "4",
                "_score": 3.5244086,
                "_source": {
                    "title": "Angular Tools for High Performance",
                    "content": "devtools", --> note this its below doc-3
                    "published_date": "2014-03-22",
                    "tags": [
                        "angular",
                        "performance",
                        "fast"
                    ],
                    "no_of_likes": 35,
                    "status": "published"
                }
            },
            {
                "_index": "64180913_1",
                "_type": "_doc",
                "_id": "1",
                "_score": 1.1478703,
                "_source": {
                    "title": "Introduction to elasticsearch",
                    "content": "Elasticsearch is a distributed, open source search slay and tutorial analytics engine for all types of data",
                    "published_date": "2020-01-02",
                    "tags": [
                        "elasticsearch",
                        "distributed",
                        "storage"
                    ],
                    "no_of_likes": 21,
                    "status": "published"
                }
            },
            {
                "_index": "64180913_1",
                "_type": "_doc",
                "_id": "2",
                "_score": 1.1478703,
                "_source": {
                    "title": "Why is Elasticsearch fast?",
                    "content": "It is able to achieve fast search responses because, instead small of tutorial searching the text directly, it searches an index instead",
                    "tags": [
                        "elasticsearch",
                        "fast",
                        "index"
                    ],
                    "no_of_likes": 10,
                    "status": "draft"
                }
            },
            {
                "_index": "64180913_1",
                "_type": "_doc",
                "_id": "5",
                "_score": 1.1478703,
                "_source": {
                    "title": "The new features in Java 14",
                    "content": "Oracle on September 17 said switch expressions tutorial are expected naresh to go final in Java Development Kit 14 (JDK 14). ",
                    "published_date": "2019-07-20",
                    "tags": [
                        "java"
                    ],
                    "no_of_likes": 11,
                    "status": "published"
                }
            }
        ]

synonym P.S:这与无关,所以我删除了这个部分,使你的问题简短简单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64180913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档