我正在使用Elasticsearch 6.8版本进行文档索引,并且在搜索时有此要求。我已经使用以下设置创建了索引。
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2,
"analysis": {
"analyzer": {
"default": {
"type": "custom",
"tokenizer": "icu_tokenizer"
}
}
}
},
"mappings": {
"person": {
"properties": {
"firstName": {
"type": "text"
},
"lastName": {
"type": "text"
},
"technologies": {
"type": "nested"
}
}
}
}
}
例如,我正在使用以下技术创建3个文档。
因此,当通过关键字“test”进行搜索时,它将返回所有文档,这是正确的行为,但是我希望第二个文档具有优先权,因为它以test *开头。因此,我的要求是从以下优先级入手。
搜索结果应为:
其他人可以按任意顺序
这是我的搜索Java代码。我正在使用elasticsearch-rest-high-level-client库。
SearchRequest searchRequest = new SearchRequest(“profile1”);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
QueryBuilder queryBuilder = QueryBuilders
.boolQuery()
.must(QueryBuilders
.matchQuery("technologies.name", technology));
searchSourceBuilder.query(QueryBuilders
.nestedQuery("technologies",
queryBuilder,
ScoreMode.Avg));
searchRequest.source(searchSourceBuilder);
SearchResponse response =
client.search(searchRequest, RequestOptions.DEFAULT);
我在搜索文档时缺少什么?请帮我。谢谢。
最佳答案
我设法从以下链接中找到更多有用的答案。
https://www.elastic.co/blog/starts-with-phrase-matching
https://gist.github.com/polyfractal/4704772