我尝试使用术语过滤器来查找数组列表中的确切标记名称,例如。
tag_names: ["tea", "green tea"]
我用
{"filter": {"term": {"tag_names": "green tea"}}}
它给我一个错误的结果。我用Google搜索了许多链接,只是找到了与数组列表完全匹配的解决方案(但没有空格)。
答案 0 :(得分:1)
如果您要搜索确切的字词,请确保您要搜索的字段为not_analyzed
。 Term Query
适用于not_analyzed
字段。
如果您的字段为analyzed
,那么术语green tea
将被标记为两个字词green
和tea
。在这种情况下,您可能需要使用match query
或query_string
查询。请使用
{
"query": {
"query_string": {
"default_field": "tag_names",
"query": "green tea"
}
}
}
关于analyzed
和non anlyzed
here
您可以使用
查看tag_names
字段是analyzed
还是not_analyzed
GET /index/type/_mapping
答案 1 :(得分:0)
试试这个:
GET index/type/_search
{
"query":{
"term": {
"tag_names": {
"value": "green"
}
}
}
}
注意:如果您要搜索多个字词,请确保 term 过滤器适用于一个字词,您可以使用 query_string 过滤器。 如果您希望在该索引的映射中进行精确搜索,则必须将该特定字段设置为not_analysed。
如果您在每个文档中单独搜索多个术语,请尝试使用此项..
GET index/type/_search
{
"query":{
"terms": {
"tag_names": ["green","tea"]
}
}
}
答案 2 :(得分:0)
试试这个:
{
"query": {
"bool": {
"must":
{
"match" : {
"tag_names" : {
"query":"green tea",
"operator":"and"
}
}
}
}
}
}