Elasticsearch:在JSON数组中搜索

时间:2017-03-19 15:50:35

标签: elasticsearch full-text-search

我在python库中使用Elasticsearch,当对象变得有点复杂时,我在使用搜索查询时遇到问题。我在我的索引中构建了类似的对象:

# TEST
testspeech = scipy.io.loadmat('data/test_cep.mat')
Y_test = testspeech['ans']
Y_test = np.array(Y_test)  # 799x161 cepstrum matrix
noisyspeech = scipy.io.loadmat('data/reverb_cep.mat')
Y_noisy = noisyspeech['ans']
Y_noisy = np.array(Y_noisy)  # 799x161 cepstrum addnoise matrix

batch = Y_test
batch_noise = Y_noisy

avg_cost += sess.run(cost, feed_dict=feed2)/num_batch

print ("cost: %.9f" % (avg_cost))

现在我想做一个查询,只有在显示的URL中有一个子字符串" test"并且有一个字段" text"在主文件中。所以我做了这个查询:

{
   "id" : 120,
   "name": bob,
   "shared_status": {
       "post_id": 123456789,
       "text": "This is a sample",
       "urls" : [
           {
              "url": "http://test.1.com",
              "displayed_url": "test.1.com" 
           },
           {
              "url": "http://blabla.com",
              "displayed_url": "blabla.com" 
           }
       ]
   }
}

但我不知道要为该部分添加哪些查询:{ "query": { "bool": { "must": [ {"exists": {"field": "text"}} ] } } } }

那可能吗?列表上的迭代如何工作?

1 个答案:

答案 0 :(得分:2)

如果没有为架构定义显式映射,elasticsearch会根据数据输入创建默认映射。

由于urldisplayed_url之间不需要任何关联,因此当前架构可以正常运行。

您可以使用match query进行全文匹配

GET _search
{
  "query": {
    "bool": {
      "must": [
        {
          "exists": {
            "field": "text"
          }
        },
        {
          "match": {
            "urls.displayed_url": "test"
          }
        }
      ]
    }
  }
}