这是我的建议(同样,您需要启用脚本):
PUT /test{ "settings": { "analysis": { "analyzer": { "autocomplete": { "type": "custom", "tokenizer": "standard", "filter": [ "standard", "lowercase", "ngram" ] }, "search_ngram": { "type": "custom", "tokenizer": "keyword", "filter": "lowercase" } }, "filter": { "ngram": { "type": "ngram", "min_gram": 2, "max_gram": 15 } } } }, "mappings": { "test": { "properties": { "text": { "type": "string", "index_analyzer": "autocomplete", "search_analyzer": "search_ngram", "index_options": "positions", "fields": { "not_analyzed_sorting": { "type": "string", "index": "not_analyzed" } } } } } }}POST test/test/_bulk{"index":{"_id":1}}{"text":"Paracetamol"}{"index":{"_id":2}}{"text":"Paracetamol xxx yyy zzz"}{"index":{"_id":3}}{"text":"Parafin"}{"index":{"_id":4}}{"text":"LIQUID PARAFFIN"}{"index":{"_id":5}}{"text":"ISOMETHEPTENE WITH PARACETAMOL"}GET /test/test/_search{ "query": { "match": { "text": "Para" } }, "sort": [ { "_script": { "type": "number", "script": "termInfo=_index[field_to_search].get(term_to_search.toLowerCase(),_POSITIONS);if (termInfo) {for(pos in termInfo){return pos.position}};return 0;", "params": { "term_to_search": "Para", "field_to_search": "text" }, "order": "asc" } }, { "text.not_analyzed_sorting": { "order": "asc" } } ]}更新
对于您的更新问题, 即使我希望再发表一则文章 ,也可以使用以下查询:
{ "query": { "match": { "text": "Para" } }, "sort": [ { "_script": { "type": "number", "script": "termInfo=_index[field_to_search].get(term_to_search.toLowerCase(),_POSITIONS);if (termInfo) {for(pos in termInfo){if (pos.position==0) return pos.position; else return java.lang.Integer.MAX_VALUE}};return java.lang.Integer.MAX_VALUE;", "params": { "term_to_search": "Para", "field_to_search": "text" }, "order": "asc" } }, { "text.not_analyzed_sorting": { "order": "asc" } } ]}


