背景我有一个小索引与一些字符串字段(例如名称,街道,城市,电子邮件)。
和类似于
Lorem ipsum dolor sit amet,consectetuer adipiscing Elit。埃尼·康茂多·利古拉·埃盖特·多洛。埃尼安·马萨。同时也是一个社会成员,即natoque penatibus et magnis dis matraft montes,nascetur loomus mus。Donec quam felis,ultricies nec,pellentesque eu,pretium quis,SEM。我的名字是我的街道。Donec pede justo、fringilla vel、aliquet nec、vulputate eget、Arcu。在enim justo,rhoncus ut,imperdiet a,venenatis vitae,justo.Nullam dictum felis eu pede mollis pretium。整数Tincidunt。克拉斯达皮布斯。香叶草。埃尼安·瓦尔普塔特·埃莱芬德·特卢斯。Eenean leo ligula,Portitor eu,con
我想要的是使用查询内索引中的值进行搜索。
因此,如果索引中有一个条目name=“my-name”或street=“my-street”,则应该返回该条目。
我能找到的最接近的帖子是搜索ElasticSearch字段包含在一个值中,但标记器只是从索引中拆分值,我需要更像查询中的子字符串搜索。
找到了一个可能的(但不是高性能的)解决方案:
1.)只为Search-Analyzer设置一个n-gram过滤器。Index-analyzer仍然是“标准”:
>
设置:
"analysis": {
"filter": {
"desc_ngram": {
"type": "ngram",
"min_gram": 3,
"max_gram": 50
}
},
"analyzer": {
"search_ngram": {
"type": "custom",
"tokenizer": "keyword",
"filter": [ "desc_ngram", "lowercase" ]
}
}
}
映射
"user": {
"properties": {
"street": {
"type": "string",
"analyzer": "standard",
"search-analyzer": "search_ngram"
}
}...
}
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;
});
我试图在ElasticSearch中运行类似的字段查询:
问题内容: 我正在尝试在ElasticSearch中运行类似的字段查询: 意思是我正在尝试查找所有文档,其中产品名称在这种情况下是’milk’的子字符串。 我该怎么做? 问题答案: 我会使用一个使用ngrams的自定义分析器。首先创建一个像这样的索引: 然后,您可以索引一些数据: 最后,您可以像这样搜索: 然后您将获得前两个文档,
问题内容: 我有这样的Elasticsearch数据- 在此示例中,我进行了全文搜索,正在“ text”字段中搜索所有具有“ unemployment”子字符串的文档。最后,我希望所有文档以“文本”字段中“失业”字符串的索引值的升序排列。例如- 子字符串“失业”首先在doc2中的索引“ 4”处出现,因此我希望此文档在结果中首先返回。 我尝试了一些诸如term_vector这样的事情,这是我使用的映
问题内容: 我的数据库具有按以下方式排序的值: 我想实现一个朋友添加系统,您可以在其中搜索用户名或电子邮件,并允许您添加此人。 我可以通过使用找到用户 这样我就可以得到用户的整个字典,但是在获取UID时遇到了问题。 snapshot.key给了我“用户”。 使用用户名/电子邮件找到用户的字典后,如何从字典中获取UID值? 问题答案: 对Firebase数据库执行查询时,可能会有多个结果。因此,快照
我想按姓名、姓氏或电子邮件搜索用户,但由于我没有上述级别的用户密钥,我不知道如何实现这一点。我正在执行和管理员会话,因此它无法访问用户密钥。 我尝试过: 但它会把所有用户都带到数据库上。有什么想法吗?
更改历史 * 2018-05-07 胡小根 初始化文档 1 历史、现状和发展 1.1 历史 1.2 现状 1.3 发展 难点:预测发展方向。 2 安装和使用 2.1 安装 2.2 使用 创建index和type 上传单条数据 批量上传数据 查询 2.3 示例 2.4 最佳实践 难点:最佳实践,超出于示例,应该归纳总结出积累的技巧。 3 同类技术对比 难点:归纳比对项 参考资料 El