我和ElasticSearch一起工作。当我执行此查询时:
{query: "blackberry -q10"}
我得到了我想要的(所有的结果,其中有参考黑莓,但不是Q10)。
但是,我想限制搜索的字段只限于“title”字段。例如,_source文档有标题、正文、标签等,我只想搜索标题。ElasticSearch“匹配”似乎很适合我...
{query: {match: {title: "blackberry -q10"}}}
虽然这只成功地搜索了标题,但它仍然返回标题中带有Q10的结果,这与上面的搜索不同。
我正在看比赛文档,但似乎不明白。
谢了!
匹配查询不使用这样的否定语法。你不能用“减”来否定一个项。它将被默认的搜索分析器解析为连字符。
在这种情况下,我将使用筛选后的查询。您可以在查询中添加否定...但是过滤器会快得多。
{
"filtered":{
"query":{
"match":{
"title":"blackberry"
}
},
"filter":{
"bool":{
"must_not":{
"term":{
"title":"q10"
}
}
}
}
}
}
注意,您可能需要更改术语
筛选器,这取决于在索引时分析字段的方式。
Edit:根据您下面的注释,如果您真的希望保持“内联”做否定的能力,您可以使用field
查询(query_string
的一个更具体的版本,它也可以工作)。此查询使用Lucene语法,允许内联否定
{
"field" : {
"title" : "blackberry -q10"
}
}
不推荐query_string
及其派生词的原因是,这很容易搬起石头砸自己的脚。或者更确切地说,你的用户很容易打你服务器的脸。Query_string需要正确的语法,如果用户输入错误,Query_string就会消失。它还允许您的用户进行一些可怕的低效查询,通常是通过通配符
问题内容: 我正在使用Elasticsearch,但有一段时间魔鬼般地要进行精确匹配。我已经尝试过match,query_string等的各种组合,但是我什么也没得到,或者得到了不好的结果。查询看起来像这样: 排序结果 我当然知道“狗”,“那只狗”和“狗”的得分相同,但是我需要弄清楚如何提高得分“狗”的精确匹配度。 我也试过 但这仍然给我 问题答案: 默认情况下,使用标准分析仪分析字段。如果您想检
我想同时执行精确的单词匹配和部分单词/子字符串匹配。例如,如果我搜索“test product”,那么我应该能够在结果中找到“test”和“product”相关的文本。我用下面的match查询搜索弹性搜索,它不是给我精确的匹配,而是给我一些更多的不确定的匹配。示例是在结果中给出与“sample”相关的文本。 我使用弹性搜索6.3 请在下面找到我的查询 搜索结果:“Hits”:[{“_index”:
问题内容: 在索引中,我有一个IP字段。字段的类型为“ ip”。 我想搜索所有以“ 192.168”开头的IP 我所有的尝试都失败了,并显示以下消息: 无法解析IP [192.168],不是有效的IP地址 有没有办法做到这一点,还是应该将字段的类型更改为“字符串”? 谢谢。 问题答案: 您可以使用范围查询,例如:
问题内容: 我在ES中有一个多匹配查询,并希望添加一个过滤器。 添加此过滤器的语法是什么? 我试过了: 问题答案: 根据您的需要,必须将过滤器放置在正确的位置。您有两种选择: 使用顶级过滤器,并将该过滤器仅应用于搜索结果,而不应用于各个方面 使用过滤的查询,并将过滤器应用于搜索结果和构面
问题内容: 我有一个列表,数组或您熟悉的任何一种语言。例如,names:如果与这些名称之一匹配,我想查询该字段。 一种方法是使用OR过滤器。例如 有什么更好的办法吗?如果它是查询,则比过滤器更好。 问题答案: 哪一个Elasticsearch会像您曾经使用过的那样重写 在大多数情况下,使用布尔型过滤器时,使用过滤器比或更好。原因在Elasticsearch博客中进行了解释:http://www.e
问题内容: 我对使用ngram的单词有部分匹配。如何修改映射以始终偏爱精确匹配而不是ngram令牌?我不想修改查询。一个搜索框将搜索多种类型,每种类型都有各自的字段。 例如,假设我正在搜索职位,一个人的标题为“现场工程师”,另一个人的标题为“引擎技术员”。如果用户搜索“引擎”,我希望ES将后者返回为更相关。 我几乎逐字使用此映射:例外:我使用的ngram的最小值为3,最大值为11,而不是边缘ngr