我有以下索引文件:
{
"visitor": {
"id": <SOME STRING VALUE>
}
}
该文档的映射为:
"visitor": {
"properties": {
"id": {
"type": "string"
}
}
}
当我运行以下查询时,我得到结果:
{
"query": {
"filtered": {
"query": {
"match_all": {}
}
},
"filter": {
"term": { "visitor.id": "123" }
}
}
}
但是,这不是:
{
"query": {
"filtered": {
"query": {
"match_all": {}
}
},
"filter": {
"term": { "visitor.id": "ABC" }
}
}
}
我一直认为这与分析仪有关,并且一直在追逐下去。我也一直想知道我是否错误地使用点表示法来访问嵌套的visitor属性。
谁能告诉我为什么我不能过滤ID为“ ABC”的访客,但可以过滤访客123
您需要了解elasticsearch的分析器如何工作。分析仪进行标记化(分割的输入成一束令牌,如空白的),和一组令牌滤波器(过滤掉令牌你不想,像停止词,或修改令牌,像小写令牌滤波器,其将所有内容都转换为小写)。
在两个非常特定的时间执行分析-在索引编制期间(将内容放入elasticsearch时),以及根据查询在搜索期间(针对要搜索的字符串)。
这就是说,默认分析仪是标准分析器它由一的标准标记生成器,标准令牌滤波器(从标准标记生成器清理的令牌),小写令牌过滤,并停止字令牌滤波器。
举一个例子,当您保存字符串“ I love Vincent’s pie!”时 进入elasticsearch,并使用默认的标准分析器,实际上是在存储“
i”,“ love”,“ vincent”,“ s”,“ pie”。然后,当您尝试使用term
查询( 未分析 )搜索“
Vincent’s”时,您将找不到任何内容,因为“ Vincent’s”不是这些标记之一!但是,如果使用match
查询(经过 分析 )搜索“
Vincent的派” ,则会发现“我爱Vincent的派!” 因为“ vincent”和“ s”都找到匹配项。
最重要的是:
match
搜索自然语言字符串时,请使用经过分析的查询,例如。"visitor": {
"properties": {
"id": {
"type": "string"
"index": "not_analyzed"
}
}
}
有关更多信息,请参见http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html。
问题内容: Elasticsearch的新功能,试图更好地了解这些查询之间的区别。据我所知,匹配单个项(需要小写的比赛工作?),都和文本字符串匹配。 问题答案: 查询匹配单个术语: 不分析 值。因此,不必根据所索引的内容将其小写。 如果您是在索引时间提供的,并且未分析该值,则以下查询将不会返回任何内容: 如果为查询字段定义了分析器,则查询将分析输入,并查找符合以下条件的文档: 所有条款 必须出现在
这里是Elasticsearch的新内容,并试图更好地理解这些查询之间的差异。据我所知,匹配单个术语(需要小写才能有效匹配?),和都匹配一个文本字符串。
我们有一个弹性搜索5.5设置。我们使用nest通过C#执行查询。 执行以下查询时: 我们得到了想要的结果:一个带有该数字作为标识符的结果。 执行查询时: 我们没有得到任何结果。 我们正在搜索的值位于搜索信息字段中,值为“1-00917751”。 我们有一个名为“最终”的定制分析仪 .自定义(“最终”,cu= 字段SearchIdentifier上未设置自定义分析器。我尝试在其中添加空白标记器,但没
以下是我的疑问.... 我没有结果。 另外,我正在使用这个插件来生成请求正文。 我的查询如下所示.. null 感谢您到目前为止的阅读,如果有人能帮助我找出如何使这一工作,我将非常感谢。
我遇到了一些实际的问题,比如使用字段增强来处理ElasticSearch。我已经看过关于这个主题的Nest文档,但它们没有特别大的帮助,所以我的代码实际上是基于这个问题的解决方案:使用Nest Field Boosting进行弹性搜索。 如果运行以下查询,我会得到一个结果,正如预期的那样: 然而,如果我尝试使用场增强,使用以下方法,我没有得到匹配: .OnFieldsWithBoost(d=>d.
问题内容: 在对包含多个单词的字符串字段进行排序时,Elasticsearch会拆分字符串值,并使用min或max作为排序值。IE:按升序对值为“老虎眼”的字段进行排序时,排序值为:“眼”,而按降序进行排序时,值为:“老虎”。 假设我在索引中输入了“老虎之眼”和“死亡之轮”,当我对该字段进行升序排序时,我希望“老虎之眼”是第一个,因为“ E”在“ W”之前,但我在该字段上进行排序时看到的是“死亡轮