这可以通过以下设置来实现。
POST your_index{ "settings": { "analysis": { "analyzer": { "keyword_analyzer": { "type": "custom", "filter": [ "lowercase" ], "tokenizer": "keyword" }, "shingle_analyzer":{ "type" : "custom", "filter" :["lowercase","shingle_filter"], "tokenizer" : "standard" } }, "filter": { "shingle_filter": { "type": "shingle", "min_shingle_size": 2, "max_shingle_size": 5 } } } }, "mappings": { "your_type": { "properties": { "keywords": { "type": "string", "index_analyzer": "keyword_analyzer", "search_analyzer": "shingle_analyzer" } } } }}在这里,由于需求
analyzers,我使用了两种不同的方法,一种用于
indexing和一种用于
searching。
keyword_analyzer需要按原样索引该词,以便对
经理的 查询不会与 饭店经理
一起返回文档。有关关键字分析器的更多信息。现在,搜索需要带状滤波器以
phrases从输入文本生成。像 This restaurant manager那样的
文本将被分成 This restaurant , restaurant manager , manager is
等等,您将获得期望的结果。您可以使用分析API来查看分析器的工作方式。
您可以像这样索引文档
PUT your_index/your_type/1{ "keywords": ["restaurant manager", "chef", "bus boy"]}这种类型的查询将为您提供文件
GET your_index/_search{ "query": { "match": { "keywords": "This restaurant manager is also a good chef" } }}希望这可以帮助!



