【发布时间】:2020-07-09 03:36:26
【问题描述】:
我正在使用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);
我在搜索文档时是否遗漏了什么?请帮助我。谢谢。
【问题讨论】:
标签: java elasticsearch indexing full-text-search