我在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"}}
]
}
}
}
}
那可能吗?列表上的迭代如何工作?
答案 0 :(得分:2)
如果没有为架构定义显式映射,elasticsearch会根据数据输入创建默认映射。
urls
的类型为object displayed_url
将为字符串类型并使用standard analyzer 由于url
和displayed_url
之间不需要任何关联,因此当前架构可以正常运行。
您可以使用match query进行全文匹配
GET _search
{
"query": {
"bool": {
"must": [
{
"exists": {
"field": "text"
}
},
{
"match": {
"urls.displayed_url": "test"
}
}
]
}
}
}