在弹性搜索中,这个过滤器
{
"bool": {
"must": {
"term": {
"article.title": "google"
}
}
}
}
正确返回标题中带有“google”的文章。
然而,
{
"bool": {
"must": {
"term": {
"article.title": "google earth"
}
}
}
}
不返回任何结果,尽管有些文章的标题中包含确切的词“google earth”。我希望它这样做。
完整的查询:
{
"size": 200,
"filter": {
"bool": {
"must": {
"term": {
"article.title": "google maps"
}
}
}
},
{
"range": {
"created_date": {
"from": "2013-01-11T02:14:03.352Z"
}
}
}]
}
}
如您所见,我没有“查询”——只有过滤器、大小和范围。所以我认为 ElasticSearch 正在使用默认分析器......?
我有什么误解?
编辑:对于那些寻找解决方案的人,这是我的过滤器:
{
"query": {
"bool": {
"must": {
"must_match": {
"article.title": "google earth"
}
}
}
}
}
节点(1)我们用“query”包装了布尔过滤器,(2)“term”更改为“must_match”,这导致整个短语被匹配(而不是“match”,它将搜索文章。标题与谷歌地球上的标准分析仪)。
完整的查询如下所示:
{
"size": 200,
"filter": {
"query": {
"bool": {
"must": {
"must_match": {
"article.title": "google earth"
}
}
}
}
}
}
FWIW,我在“过滤器”字段(而不是使用标准查询)中有这个条件的原因是有时我想使用“must_not”而不是“must_not”,有时我还会添加其他元素到询问。