我的索引包含字段 title ,其数据如下所示。
因此,如果用户搜索 jam ,我不希望 jamun 和牙买加国家/地区也会出现在搜索结果中。现在我在elasticsearch中使用前缀查询,但它没有按我的意愿给出结果。
{
"query": {
"prefix" : { "title" : "jam" }
}
}
答案 0 :(得分:0)
您将获得两个结果,因为前缀查询实际上在倒排索引上运行正则表达式查询(keyword*)
,因此结果将匹配。
您可以执行以下操作,并使用term query而不是前缀查询来对tokenized关键字进行完全匹配。
PUT exact_index1
{
"mappings": {
"document_type" : {
"properties": {
"title" : {
"type": "text"
}
}
}
}
}
POST exact_index1/document_type
{
"title" : "jamun"
}
POST exact_index1/_search
{
"query": {
"term": {
"title": {
"value": "jam"
}
}
}
}
希望这有帮助
答案 1 :(得分:0)
完成建议器提供搜索即用型功能
PUT - index_name/document_type/_mapping
{
"document_type": {
"properties": {
"title": {
"type": "text"
},
"suggest": {
"type": "completion",
"analyzer": "simple",
"search_analyzer": "simple"
}
}
}
}
POST - index_name/document_type
{
"name": "jamun",
"suggest":
{
"input": "jamun"
},
"output": "jamun"
}
POST - index_name/document_type/_suggest?pretty
{"type-suggest":{"text":"jam","completion":{"field":"suggest"}}}