我有一个在elasticsearch中搜索的特例。我还深入研究了文档、标记器(n克、边缘ngram)、查询等以及堆栈溢出搜索,但没有结果。
背景I有一个包含一些字符串字段的小索引(eq )。姓名、街道、城市、电子邮件)。
以及类似这样的查询
Lorem ipsum dolor坐好了,敬请光临。[医]埃尼昂·科莫多·伊古拉·多洛。埃尼安·马萨。同时社会是自然的,不是分娩的,而是母体。猫科动物,三叶草,欧洲植物,牛肝菌,sem。在,我的名字叫 quis,My-Street。长笛,圆圈,飞碟,低俗的eget,弧。在欧洲法院,罗布麻,不允许饮食a,文冠花,法官。虎耳草。整数修补。大比目鱼。[医]野黄花。埃尼安( Aenean vulputate eleifend tellus )埃尼安利奥利古拉,欧盟港口商
我想要的是使用搜索--查询中的索引中的值。
因此,如果索引中有名称= "My- name“或street = "My-Street”的条目,则应返回该条目。
我能找到的最近的帖子是Search ElasticSearch field contained in a value,但是令牌程序只是将值从索引中分离出来,我需要更像查询中的子字符串搜索。
谢谢,并向西蒙问好
发布于 2017-01-12 16:38:19
找到了一个可能的(但不是高性能的)解决方案:
1.)为搜索分析器设置n克过滤器仅.指数分析器仍然是“标准”:
2.将输入文本分割成小块(约47个字符)
String subtext = request.post.getText().substring(startIndex, offset);3.)为每个块启动一个普通的elasticsearch查询(以异步方式执行)
return CompletableFuture.supplyAsync(() -> {
SearchRequestBuilder search = this.prepareSearch()
.setQuery(QueryBuilders.queryStringQuery(textToAnalyze))
.setSize(100);
SearchResponse response = search.get();
UserHit result = transformToHitFrom(response, UserHit.class);
return result;
}).exceptionally(e -> {
logger.error("Error occurred while searching for user", e);
UserHit result = new UserHit();
return result;
});我还没有执行性能测试,但我希望该解决方案具有比标准子字符串方法更好的性能。我们将在接下来的几天里对此进行测试。
https://stackoverflow.com/questions/41570918
复制相似问题