如何在与MongoDB集成的Spring boot Elastic Search中实现对非结构化数据的搜索

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在与MongoDB集成的Spring boot Elastic Search中实现对非结构化数据的搜索相关的知识,希望对你有一定的参考价值。

我是Elasticsearch的新手,想知道以下情况是否对我有用

我想在非结构化数据上实现搜索功能,我的意思是我不知道模型具有什么样的字段,如您所见,下面的图片我在模型内部有一个data属性,其中可以包含任何类型的数据可How can I achieve search functionality on this data model

我知道如何使用mongo-connect连接mongodb和elasticsearch,但我不知道能否达到要求?

答案
此答案基于您的最新评论。

例如,您的data字段映射如下:

PUT my_index "mappings": "properties": "data": "type": "nested"

您可以看到我们没有在架构中插入字段,当我们为第一个文档建立索引时,elastic将为我们做到这一点。

插入新文档:

POST my_index/_doc/1 "data" : "adType" : "SELL", "price" : "2000", "numberOfRooms" : 20, "isNegotiable" : "true", "area" : 200

如果我们要搜索单词SELL,但我们不知道为其分配了哪个字段,则可以使用以下查询:

GET my_index/_search "query": "nested": "path": "data", "query": "multi_match": "query": "2000", "fields": [], "type": "best_fields"

我们设置了fields=[]的含义:

如果未提供任何字段,则multi_match查询默认为index.query.default_field索引设置,而默认设置为*。 *提取映射中所有符合词条查询条件的字段,并过滤元数据字段。然后将所有提取的字段组合起来以构建查询。

We used multi_match query

我们得到的结果:

"took" : 1, "timed_out" : false, "_shards" : "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 , "hits" : "total" : "value" : 1, "relation" : "eq" , "max_score" : 0.2876821, "hits" : [ "_index" : "my_index", "_type" : "_doc", "_id" : "1", "_score" : 0.2876821, "_source" : "data" : "adType" : "SELL", "price" : "2000", "numberOfRooms" : 20, "isNegotiable" : "true", "area" : 200 ]

UPDATE

插入文档

POST my_index/_doc/1 "data" : "SELL 2000 20 true 200"

然后查询:

GET my_index/_search "query": "match": "data":"SELL 2000"

春季使用QueryBuilder

QueryBuilder qb = QueryBuilders.matchQuery("data", "SELL 2000");

我希望这是您想要的。

以上是关于如何在与MongoDB集成的Spring boot Elastic Search中实现对非结构化数据的搜索的主要内容,如果未能解决你的问题,请参考以下文章

XmlElement(name="custom_name") 在与休息服务集成的 Spring Boot 中不起作用

6.3 Spring Boot集成mongodb开发

spring boot + apache camel + mongodb 集成问题

Spring Boot集成mongodb数据库

springboot 集成mongodb

使用 Spring Boot 进行 Kotlin 集成测试