在r库Elasticsearch中结合使用通配符和完全匹配

时间:2017-05-23 20:00:01

标签: r elasticsearch

可能由于我在Elasticsearch(以及R库Elastic)方面缺乏经验,我无法弄清楚如何以一种精确匹配与通配符相结合的方式来制定搜索查询。

docs_create(index="test",type="x", body=list(txt="this is a test"))
count(index='test', type='x',q="'a test'",default_operator="AND")

...返回一场比赛。

count(index='test', type='x',q="'a te*'",default_operator="AND")

...不返回任何匹配项(虽然我希望也能获得一场比赛)。

count(index='test', type='x',q="'a te/*'",default_operator="AND")

...产生错误(Error: 400 - all shards failed)。

count(index='test', type='x',q="'a te'//*",default_operator="AND")  

...不返回任何匹配。

欢迎任何帮助!谢谢。

PS。如果使用count函数不可能,使用搜索功能也可以解决我的问题(使用body参数)。

3 个答案:

答案 0 :(得分:0)

@peterk没有单引号的查询会返回什么?

你可以这样试试吗:

count(index='test', type='x', q="a te*", default_operator="AND")

答案 1 :(得分:0)

有一点需要注意,请尝试connect(errors = "complete")以获得更详细的错误 - 弹性服务器提供的信息基本相同

count(index='test', type='x',q="'a te/*'",default_operator="AND")
#> Error: 400 - all shards failed
#> ES stack trace:
#> 
#>   type: query_shard_exception
#>   reason: Failed to parse query ['a te/*']
#>   index_uuid: xbZ5ANNBRwqxEsqPqS05Dg
#>   index: test

这表明该查询无效

通常,使用elastic::Search()更加灵活 - 并将size参数设置为0更容易,因此您只需获得匹配的记录数。

我还不清楚确切的部分是什么。是a te还是a test还是其他什么?

答案 2 :(得分:0)

经过一周的睡眠后,我想出了如何完成这项工作(使用docs_create(index="test",type="x", body=list(txt="this is a test")) body <- '{ "query": { "match_phrase_prefix" : { "txt" : { "query" : "a te", "max_expansions" : 10 } } } }' Search(index='test',body=body) 选项:

this.res = [  
                  {
                    "children": [
                      {
                        "children": [
                          {
                            "children": [],
                            "name": "P Sub Child 3",
                          },
                          {
                            "children": [
                              {
                                "children":[],
                                "name" : "data"
                              }
                            ],
                            "name": "PSubChild2",
                          }
                        ],
                      "name": "PChild1",
                      },
                      {
                        "children": [
                          {
                            "children": [],
                            "name": "PSubChild3",
                          }
                        ],
                        "name": "PChild2",
                      }
                    ],
                    "name": "Parent1",
                  },
                  {
                  "children": [],
                  "name": "Parent2",
                  }
    ];