当前位置: 首页 > 面试题库 >

字符串上的Elasticsearch排序未返回预期结果

景胜涝
2023-03-14
问题内容

在对包含多个单词的字符串字段进行排序时,Elasticsearch会拆分字符串值,并使用min或max作为排序值。IE:按升序对值为“老虎眼”的字段进行排序时,排序值为:“眼”,而按降序进行排序时,值为:“老虎”。

假设我在索引中输入了“老虎之眼”和“死亡之轮”,当我对该字段进行升序排序时,我希望“老虎之眼”是第一个,因为“ E”在“
W”之前,但我在该字段上进行排序时看到的是“死亡轮”首先出现,因为“ D”是该术语的最小值,而“ E”是“ Eye”的最小值老虎”。

有谁知道如何关闭这种行为,只允许对此字符串字段进行常规排序?


问题答案:

正如mconlin所提到的,如果要在未分析的doc字段上进行排序,则需要指定“ index”:“
not_analyzed”以便按照您的描述进行排序。但是,如果您希望能够将此字段标记化以继续进行搜索,则sloan的[这篇文章显示了一个很好的例子。在Elasticsearch中,使用多字段来为一个字段保留两个不同的映射是很常见的。

希望对您有所帮助,请让我知道是否可以提供更多解释。



 类似资料:
  • 我有一个带有两个衰减函数(ES 2.4.4)的查询,我使用对查询项中的衰减函数得分求和。对于测试,我使用来防止任何其他分数(来自查询)影响我的分数(我想测试衰减函数)。 这些是我的衰减函数: 我的结果包括2篇不同日期的文章(2017-08-28,2009-05-08)具有相同的优先级(1000)和相同的分数!(13.122)怎么会这样?为什么没有获得更好的分数?所以我试图解释查询。 对于2017-

  • 问题内容: 我正在使用Newtonsoft的Json.Net从以下json中选择节点: 以下C#代码段 产量: 现在,这很酷,我想做的是按客户端代码过滤,我认为 可以,但是我显然对语法不够了解。这将返回一个空列表: 并且单个令牌选择器返回null: 我在https://jsonpath.curiousconcept.com/上尝试了几种不同的配置,看来我的查询语法确实坏了。 使用Flow Comm

  • 问题内容: 我正在通过NEST c#使用ElasticSearch。我有很多关于人的信息 我希望能够按lastName以及长度的顺序对项目列表进行过滤和排序,因此名称中只有5个字符的人会出现在结果集的开头,然后是10个字符的人。 所以我想用一些伪代码做类似的事情 我是ElasticSearch的新手,所以任何示例都将非常有帮助。 问题答案: 您可以使用基于脚本的排序进行排序。 作为一个玩具示例,我

  • 该函数提示用户选择石头、纸或剪刀,并将输入更改为小写。如果用户未选择上述选项之一,则返回if语句。但是,如果选择了正确的选项,则会返回其他语句。 但是,如果用户输入适当的响应,else语句不会运行。 如果我输入石头/布/剪刀以外的东西,我希望if语句运行。但是如果我输入石头/纸/剪刀,我希望其他语句运行。 但是,无论如何,else语句都不会运行。

  • 我正在使用JUnit和Mockito库来测试我的应用程序。问题是,当我在代码下面执行时,值在运行时没有返回空列表,并且测试失败。理想情况下,当get执行时,它应该返回空列表 我热切期待着支持。有没有人能帮我一下,如何通过这个测试用例???。如何通过Mockito使第8行的控件通过测试用例??? 请假设,下面两个类没有真实的代码,我们只有二进制文件作为JAR文件,我们不能修改下面的代码....我附上

  • 我对编码非常陌生,刚刚接触过静态方法,所以我为这些愚蠢的错误提前道歉。在main下调用该方法时,该方法应该显示一个三角形,但我得到的控制台是空的,没有输出。但是,如果我将此写在main下: 然后,三角形将显示在控制台中,但是对于这个赋值,字符串/三角形必须仅通过使用来调用