通过文本查询而不是

时间:2016-06-24 04:18:03

标签: elasticsearch

我有一个查询,在过滤器上使用通配符会返回结果,但使用结果中的实际文本进行查询会返回0次点击。

这有效

{
"query": {
"filtered": {
   "query": { "match_all": { } },

  "filter": {
    "nested": {
      "path": "houses",
      "query": {
        "filtered": {
          "query": { "match_all": { } },

          "filter": {
            "wildcard": {
               "houses.name": "????"
            }
          }

        }
      }
    }
  }
  }
}
}

如果它返回一个名为“夏娃花园”的房子,则不返回任何内容。

    {
"query": {
"filtered": {
   "query": { "match_all": { } },

  "filter": {
    "nested": {
      "path": "houses",
      "query": {
        "filtered": {
          "query": { "match_all": { } },

          "filter": {
            "wildcard": {
               "houses.name": "Eve gardens"
            }
          }

        }
      }
    }
  }
  }
}
}

请帮忙!

1 个答案:

答案 0 :(得分:1)

请参阅this

根据您的查询houses.name似乎是analyzed字符串,这意味着Eve gardens会被标记化并存储为evegardens而不是Eve gardens 1}}作为一个整体。根据文件

  

通配符查询按术语运行。如果您使用它们来查询分析的字段,它们将检查字段中的每个术语,而不是整个字段。

所以,如果你这样做

"wildcard": {"houses.name": "Eve gardens"}

这不起作用。

尝试

"wildcard": {"houses.name": "eve*"}

它应该取得你的结果。希望这会有所帮助..