假设我有一些文档,在名为“名称”的文本字段中包含以下值
abc xyz group
组x/组y
组1、组2、组3、组4
现在,假设我向ES发送一个简单的匹配查询,查询术语“组”:
{
"query": {
"match": {
"name": "group"
}
}
}
我期望的结果是,无论术语出现的频率、出现的位置等,所有3个文档都会以相同的分数返回。现在,我已经知道,我可以通过将我的匹配项包装为常量分数来实现这一点,如下所示:
{
"query": {
"constant_score": {
"filter": {
"match": {
"name": "group"
}
},
"boost": 1
}
}
}
但是,假设我现在想使用搜索词abc组进行查询。在这种情况下,我希望Document2和Document3返回相同的分数(匹配组),但Document1的分数更好,因为它同时匹配abc和组。
使用常量分数包装我的匹配查询,包含任何术语的文档返回相同的分数(即文档1、2和3为abc组返回相同的分数)。如果我删除了常量评分,那么文档3的评分可能是最好的,因为它包含了更多与搜索文本匹配的内容(组出现了4次)。
似乎我需要一种方法,在
匹配
查询分析了我的搜索文本后,将常量_分数
查询移动到。有效地使abc组的查询成为两个恒定分数查询-一个用于abc组,另一个用于abc组。
有人知道实现这一目标的方法吗?
我利用Elasticsearch的独特令牌过滤器成功解决了这个问题:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-unique-tokenfilter.html
我已经将它添加到索引映射中的name
字段中,它看起来正在检索所需的结果,而不必担心constant_score
。
然而,请注意,所有这一切都是为了消除术语频率对得分的任何影响-其他指标(如字段长度)仍然会对结果产生影响。因此,这并不等同于我在问题中假设的使用后分析版本的常量分数,但这足以满足我当前的要求。
我有一个带有标准分析器的弹性搜索集群。我知道使用这个分析仪,术语“300”被分析为一种类型。 假设我正在搜索一个具有字段“name”的文档,该字段的值为“纸巾300 CT”,分析为[“Paper”(ALPHANUM)、“tower”(ALPHANUM)、“300”(NUM)、“CT”(ALPHANUM)] 目前,当我使用模糊/通配符查询时,如下所示: 无论模糊性如何调整,模糊查询都不匹配。我希望术
这个问题类似于我的另一个问题,在这里输入Val回答的链接描述。 我有一个包含3个文档的索引。 当我搜索“Ann”时,我希望elastic返回所有这3个文档(因为它们在一定程度上都与术语“Ann”匹配)。但是,我希望符晓薇·雷具有较低的分数(相关性排名),因为搜索词“Ann”在本文档中出现的位置比该词在其他两个文档中出现的位置要晚。 这是我的索引设置… 以下查询返回了预期的文档,但Leanne Ra
问题内容: 我正在寻找给定此数组的函数, 我想寻找针头 “面包” 并得到以下结果 问题答案: 使用。您可以提供一个回调,该回调确定哪些元素保留在数组中以及哪些元素应删除。(从回调返回的值指示应删除给定的元素。)类似这样的东西: 欲获得更多信息: 返回值
我的目标是搜索一个词,而不管添加了什么分析器。 我使用了匹配查询与关键字分析器,但我认为它可以与添加到该属性中的默认分析器一起工作。 在弹性搜索中,我的作者文档结构如下所示
问题内容: 我正在尝试为最终用户提供搜索类型,这更像sqlserver。我能够为给定的SQL场景实现ES查询: 但是ES查询不适用于此sql查询 在我的elasticsearch以及通配符查询中,我还需要执行一些布尔过滤查询 上面的带有通配符搜索的弹性查询可以很好地工作,并让我获得所有与pete匹配且不是xyz和abc类型的文档。但是当我尝试使用以空格分隔的2个独立单词执行通配符时,相同的查询返回
问题内容: 我正在使用Elasticsearch构建URL索引。 我将一个URL提取为3个部分,分别是“域”,“路径”和“查询”。 例如:将分为 当我想在索引中部分搜索域时出现问题,例如“ user = who”或“ ing.com”。 甚至在索引时没有使用“ Analyzer”时,是否可以使用“ Analyzer”? 如何基于分析仪进行部分搜索? 非常感谢你。 问题答案: 2种方法: 1.通配符