我想进行全文搜索,但我也想使用一个或多个可能的过滤器。使用/things/_search?q=*foo*
搜索时,文档的简化结构:
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "things",
"_type": "thing",
"_id": "63",
"_score": 1,
"fields": {
"name": [
"foo bar"
],
"description": [
"this is my description"
],
"type": [
"inanimate"
]
}
}
]
}
}
这很好用,但如何将过滤器与查询结合起来呢?让我们说我想搜索" foo"在一个包含多个文档的索引中,但我只想获得那些类型为=="无生命的"?
这是我到目前为止的尝试:
{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "*foo*"
}
},
"filter": {
"bool": {
"must": {
"term": { "type": "inanimate" }
}
}
}
}
}
}
当我删除filter
部分时,它会返回一组准确的文档匹配。但是使用此过滤器定义它不会返回任何内容,即使我可以手动验证是否存在type == "inanimate"
的文档。
答案 0 :(得分:2)
由于您尚未进行显式映射,@
查询正在寻找完全匹配。您需要将term
添加到类型字段,然后您的查询才能生效。
这将为您提供正确的文件
"index : not_analyzed"
但这不是解决方案,你需要做我所说的显式映射。