以下是可用的样本数据:
以下是我尝试的查询:
前缀,它仅为我们提供了开头+短语。 如果我在机场搜索汽车,我们将不会得到像#34;汽车租赁机场服务"或者租车去机场接机。
示例查询:
"query": {
"bool": {
"must": [
{
"prefix": {
"sfield.exact": {
"value": "car hire"
}
}
}
]
}
}
尝试 match_phrase_prefix ,这也类似于前缀
示例查询:
"query": {
"bool": {
"must": [
{
"match_phrase_prefix": {
"sfield": {
"value": "car hire"
}
}
}
]
}
}
示例查询:
"query": {
"bool": {
"must": [
{
"prefix": {
"sfield.exact": {
"value": "car "
}
}
},
{
"query_string": {
"default_field": "sfield",
"query": "car hire*",
"default_operator": "AND"
}
}
]
}
}
第3点效果很好,但第一次执行时需要花费大量时间。 之前这个查询返回快速结果,但现在它的响应很慢.. 我使用字段类型作为" text" (用于query_string搜索)和"关键字" (对于前缀搜索),我的总数据大小约为60 GB,我的应用程序是使用PHP创建的。
请告诉我,如果有任何方法可以在较短的时间内获取startwith +所有匹配的单词(包括部分匹配)..
示例映射
"mappings": {
"ctype": {
"_all": { "enabled": false },
"properties": {
"id": { "type": "long" },
"cname": { "type": "text" },
"sfield": {
"type": "text",
"fields": {
"exact": {
"type": "keyword"
}
}
}
}
}
}
答案 0 :(得分:0)
如果我理解正确,您只需要start with
选项。因此,我建议您使用wildcard
:
"query": {
"bool": {
"must": [
{
"wildcard": {
"sfield.exact": "car hire*"
}
}
]
}
请参阅Wildcard