我已经开始使用AWS弹性搜索服务,我想在部分字符串搜索和多字搜索中搜索JSON数组对象。
例如,我已在数组中添加了三个对象。
[{
"_id" : "1",
"TitleKeywords" : "Game of thrones"
},
{
"_id" : "2",
"TitleKeywords" : "Baywatch"
},
{
"_id" : "3",
"TitleKeywords" : "Spider Man"
}]
现在我想对字段名称TitleKeywords执行搜索,我想搜索部分字也搜索多个单词。
例如,如果我想搜索“Spi”字符,那么它应该会导致我进入JSON对象下面。
{
"_id" : "3",
"TitleKeywords" : "Spider Man"
}
我搜索了此查询语法,并在以下查询中找到:
query: {
query_string: {
default_field: "TitleKeywords",
query: "*Spi*"
}
}
此外,对于搜索关键字'Spider M'(这是一个多字搜索),它应该会导致我进入JSON对象下面:
{
"_id" : "3",
"TitleKeywords" : "Spider Man"
}
现在,如果我想搜索多个单词,那么我可以使用以下查询:
query: {
match: {
"TitleKeywords": {
"query": "Spider M",
"operator": "and"
}
}
}
我希望我的结果是两个查询的混合,这会导致对多个单词进行部分字符串搜索。
有人可以帮我吗?
由于
答案 0 :(得分:0)
我认为您应该考虑将multi-fields与NGram Tokenizer结合使用。
所以你要向你的"TitleKeywords"
添加ngram字段并以这种方式查询:
query: {
match: {
"TitleKeywords.ngram": {
"query" : "Spider M",
"operator": "and"
}
}
}
但是来自1个字符的NGram可能无效,所以我不确定这是否符合您的需求。