我正在使用带有Haystacksearch
和Django
的Elasticsearch,并希望搜索以下结构:
{
{
"title": "book1",
"category" : ["Cat_1", "Cat_2"],
"key_values" :
[
{
"key_name" : "key_1",
"value" : "sample_value_1"
},
{
"key_name" : "key_2",
"value" : "sample_value_12"
}
]
},
{
"title": "book2",
"category" : ["Cat_3", "Cat_2"],
"key_values" :
[
{
"key_name" : "key_1",
"value" : "sample_value_1"
},
{
"key_name" : "key_3",
"value" : "sample_value_6"
},
{
"key_name" : "key_4",
"value" : "sample_value_5"
}
]
}
}
现在我已经使用Haystack建立了一个索引模型,其中包含一个“文本”,可以将所有数据放在一起并运行全文搜索!在我看来,这不是一个完善的搜索,因为我没有使用我的数据集结构,因此这有点奇怪。
作为一个例子,如果对象我有一个键值
{
"key_name": "key_1",
"value": "sample_value_1"
}
和我有另一个对象
{
"key_name": "key_2",
"value": "sample_value_1"
}
我们得到一个类似“Key_1 sample_value_1”的查询,我得到了一个完全混合的对象结果,这些对象在他们的字段中有这些单词而不是使用它们的结构。
附:我对ElasticSearch完全不熟悉,并且更好地说新的搜索技术和挑战。我在网上搜索过,SO按钮没有找到令人满意的东西。如果我对这些搜索引擎的想法和期望有问题,请告诉我,如果有重复的问题!此外,如果有更好的方法为这种搜索设计数据库
答案 0 :(得分:1)
阅读es docs on nested mappings并执行以下操作:
"book_type" : {
"properties" : {
// title, cat mappings
"key_values" : {
"type" : "nested"
"properties": {
"key_name": {
"type": "string", "index": "not_analyzed"
},
"value": {
"type": "string"
}
}
}
}
}
"nested" : {
"path" : "key_values",
"query" : {
"bool" : {
"must" : [
{
"term" : {"key_values.key_name" : "key_1"}
},
{
"match" : {"key_values.value" : "sample_value_1"}
}
]
}
}
}