首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch:在输入值中搜索具有索引值的子字符串

Elasticsearch:在输入值中搜索具有索引值的子字符串
EN

Stack Overflow用户
提问于 2017-01-10 14:14:06
回答 1查看 304关注 0票数 0

我有一个在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,但是令牌程序只是将值从索引中分离出来,我需要更像查询中的子字符串搜索。

谢谢,并向西蒙问好

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 16:38:19

找到了一个可能的(但不是高性能的)解决方案:

1.)为搜索分析器设置n克过滤器.指数分析器仍然是“标准”:

  • 背景: “分析”:{“筛选”:{ "desc_ngram":{“类型”:"ngram","min_gram":3,"max_gram":50 },“分析器”:{ "search_ngram":{“类型”:“自定义”,“记号器”:“关键字”,“筛选器”:"desc_ngram",“小写”}}
  • 映射 “用户”:{“属性”:{“街道”:{“类型”:“字符串”,“分析器”:“标准”,“搜索分析器”:"search_ngram“}}.}

2.将输入文本分割成小块(约47个字符)

代码语言:javascript
复制
String subtext = request.post.getText().substring(startIndex, offset);

3.)为每个块启动一个普通的elasticsearch查询(以异步方式执行)

代码语言:javascript
复制
        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;
    });

我还没有执行性能测试,但我希望该解决方案具有比标准子字符串方法更好的性能。我们将在接下来的几天里对此进行测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41570918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档