在elasticsearch中以精确的单词匹配开头?

时间:2017-07-17 06:46:50

标签: search elasticsearch lucene prefix

我的索引包含字段 title ,其数据如下所示。

  1. 果酱面包
  2. jamun
  3. 牙买加国家
  4. 因此,如果用户搜索 jam ,我不希望 jamun 牙买加国家/地区也会出现在搜索结果中。现在我在elasticsearch中使用前缀查询,但它没有按我的意愿给出结果。

    { 
      "query": {
        "prefix" : { "title" : "jam" }
      }
    }
    

2 个答案:

答案 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"}}}