elasticsearch,Spring Boot,elasticsearch" /> elasticsearch,Spring Boot,elasticsearch" />

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

Spring boot 如何在Spring boot中实现对非结构化数据的搜索弹性搜索与MongoDB的集成,spring-boot,elasticsearch,Spring Boot,elasticsearch,我是elasticsearch的新手,想知道以下案例是否适合我 我想在非结构化数据上实现搜索功能,我的意思是我不知道一个模型有什么类型的字段,正如下图所示,我在一个模型中有一个数据属性,其中可以包含任何类型的数据 我知道如何使用mongo connect连接mongodb和elasticsearch,但我不知道能否达到要求 这个答案是基于你最后的评论 例如,假设您的数据字段映射如下所示: PUT my_index { "mappings": { "properties": {

我是elasticsearch的新手,想知道以下案例是否适合我

我想在非结构化数据上实现搜索功能,我的意思是我不知道一个模型有什么类型的字段,正如下图所示,我在一个模型中有一个数据属性,其中可以包含任何类型的数据

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


这个答案是基于你最后的评论

例如,假设您的
数据
字段映射如下所示:

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"
        }
      }
    }
  }
}
我们设置
字段=[]
意味着:

如果未提供任何字段,则multi_match查询默认为index.query.default_字段索引设置,后者又默认为*提取映射中符合术语查询条件的所有字段,并筛选元数据字段。然后将所有提取的字段合并以生成查询

我们得到的结果是:

{
"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
          }
        }
      }
    ]
  }
}
更新

插入文件

POST my_index/_doc/1
 {
  "data" : "SELL 2000 20 true 200"
}
然后您的查询:

GET my_index/_search
{
  "query": {
       "match":
        {
          "data":"SELL 2000"
        }
   }
}
在spring中使用QueryBuilder

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

我希望这就是您正在寻找的内容。

如果我目前了解,您确实知道
数据
属性存在,但您不知道其中包含哪些字段。我说得对吗?没错,我不确定我的前端会有什么,因为每个模型都有独特的属性,但它们的核心是相同的。如果我将所有未知字段保存为一个带有空格的巨大字符串,您认为我可以实现相同的搜索功能吗@Assaelazran如果我将数据中的所有信息作为一个长字符串,并对其进行搜索,会怎么样?因为有些字段可能不是搜索所必需的,例如iscoveratible,我们对此不感兴趣,所以我可以省略一些字段@AssaelAzranYou可以这样做。将值放入一个字符串(数据字段)中。然后对一个特定的值进行简单的匹配查询。对一个特定的值?这是一个巨大的值,我将搜索整个字符串,对吗?这样可以实现相同的搜索功能吗?我说得对吗@阿塞尔·阿兹兰:是的,你是对的,但它不会给你精确的匹配。查看我的更新。向下滚动直到你看到UPDATELet我尝试一下,我会让你知道@Assael Azran是否有效。无论如何谢谢你