我试图搜索以下两个案例
我想搜索一个以特定单词开头的名称。例如:
名称:测试名称
名称:名称测试
名称:测试名称测试
如果我搜索“test”,那么它应该只返回“test name”和“test name test”。
我想搜索一个以特定单词结尾的名称。例如:
名称:测试名称
名称:名称测试
名称:测试名称测试
如果我搜索“测试”,那么它应该只返回“名称测试”和“测试名称测试”。
有人能帮我找出查询elasticsearch java API或任何其他方式来搜索它。
弹性搜索版本6.2.1
非常感谢您的帮助。
对于情况1,您可以使用CompletionSuggester
。您需要一个字段的特殊映射来使用完成提示器,如下所示:
"mappings": {
"some_index": {
"properties": {
"title": {
"type": "completion"
}
}
}}
在代码中,您应该定义建议者,如下所示(term
是您的搜索词,“start”是任意名称):
CompletionSuggestionBuilder completionBuilder = SuggestBuilders.completionSuggestion("title").prefix(term);
SuggestBuilder suggestBuilder = new SuggestBuilder();
suggestBuilder.addSuggestion("starts", completionBuilder);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.suggest(suggestBuilder);
SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.source(searchSourceBuilder);
获得搜索响应后,对其进行处理以检索建议:
Suggest suggest = searchResponse.getSuggest();
if (suggest == null) {
return Collections.emptyList();
} else {
CompletionSuggestion suggestion = suggest.getSuggestion("starts");
return suggestion
.getOptions()
.stream()
.map(CompletionSuggestion.Entry.Option::getText)
.map(Text::toString)
.collect(Collectors.toList());
}
您需要将映射与search\u analyzer
属性一起使用(analyzer\u startswith或analyzer\u endswith)
"mappings": {
"some_index": {
"properties": {
"title": {
"search_analyzer": "analyzer_startswith",
"index_analyzer": "analyzer_startswith",
"type": "string"
}
}
}
}
差不多
我实际上是一个新手到Java,并试图做一个小项目。所以,在我的项目中,我想让用户输入一个句子,我想让程序在句子中搜索特定的单词,并基于此给出输出。我使用NetBeans开发我的应用程序。 我的代码是这样的 我知道这段代码没有意义,也不会运行,但我这样说是为了让人们对我试图实现的目标有一个大致的了解。 请帮帮我.
问题内容: 首先创建一些示例数据(e1,e2,e3是类型,而test是索引名称): 现在我的问题是:我怎样才能仅获得这两个数据?删除结果中具有相同ID的重复数据。 问题答案: 首先,您将需要搜索多个索引。 然后,在结果上删除重复的ID。
问题内容: 在Elasticsearch中,如何搜索任意子字符串,也许包括空格?(仅搜索单词的一部分是不够的;我想搜索整个字段的任何子字符串。) 我想它必须在一个字段中,而不是一个字段中。 假设我的Elasticsearch索引中只有几千个文档,然后尝试: 可以按预期工作,我得到了描述中“计划”所在的每个项目,甚至是“替代”项目。 现在,我想做 …以便在许多其他可能性中将文件与“ Kaplan不是
我需要对以搜索词开头的搜索结果进行优先级排序。我用了“匹配短语前缀”。我用了“匹配短语前缀”。但它不起作用。 细节: > 质疑 结果
这是mysql查询。如何在ElasticSearch中编写此查询?我使用的是elasticsearch版本0.90.7。
问题内容: 我听说由于性能原因,不建议在SQL Server的LIKE子句的开头使用%。为什么会这样呢? 关于此的更多详细信息将帮助我理解此问题的影响。 问题答案: 子句开头的A表示索引完全无用。如果有静态文本将模式锚定到的前面,则至少可以从索引中获得潜在的实用性。