使用 Elastic Search 查询 CouchDB 中的数组内部

Posted

技术标签:

【中文标题】使用 Elastic Search 查询 CouchDB 中的数组内部【英文标题】:Using Elastic Search to Query inside arrays in CouchDB 【发布时间】:2011-08-29 05:21:46 【问题描述】:

我的 CouchDB 数据库结构如下:

"custom_details": 
  "user_education": [
    
      "device_id": "358328030246627",
      "college_name": "College",
      "college_year": "2014"
    ,
  ]


"custom_details_1": 
  "user_education": [
    
      "device_id": "358328030246627",
      "college_name": "College",
      "college_year": "2014"
    ,
  ]

我在数组中有很多数组。我正在尝试使用 Elasticsearch 搜索和查找术语,无论它位于数组中的哪个位置。这可能吗?

我一直在浏览here 上的示例,但还没有找到我想要的东西。我尝试过使用 Elastica,PHP 包装器,但没有完全理解如何使用 REST 来做到这一点,我迷路了。不知道字段也可以搜索数据吗?

【问题讨论】:

【参考方案1】:

在 Lucene 中,您可以为每个设备 ID 创建一个文档实例:

public void indexRecord(CouchDBRecord rec) 
    Document doc = new Document();
    doc.add(new Field("device_id", rec.device_id, Store.YES, Index.NOT_ANALYZED));
    doc.add(new Field("college_name",  rec.college_name, Store.YES, Index.ANALYZED));
    doc.add(new Field("college_year", rec.college_year.toString(), Store.YES, Index.NOT_ANALYZED));
    this.writer.addDocument(doc);

这将允许您按大学名称中的关键字、确切的设备 ID 或年份或它们的某种组合进行搜索。

【讨论】:

【参考方案2】:

如果您使用的是 Elastica,那么整个 REST 事情已经为您完成了。如果要在所有字段中搜索,您可以只定义搜索词,它将在所有字段中搜索。

如果您在使用 Elastica 时遇到问题,或者缺少某些您需要的功能,请告诉我,因为我是 Elastica 的开发人员。

【讨论】:

嗨 Nicolas Ruflin 我正在使用 couchdb 进行弹性搜索。我有点困惑,如何一次为多个用户管理索引。 对于一个用户来说它工作得很好,但是当我同时为多个用户尝试它时它有警告(org.apache.commons.httpclient.SimpleHttpConnectionManager getConnectionWithTimeout 警告:SimpleHttpConnectionManager 使用不正确。确保始终调用 HttpMethod.releaseConnection() 并且一次只有一个线程和/或方法正在使用此连接管理器。)

以上是关于使用 Elastic Search 查询 CouchDB 中的数组内部的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Search-如何使用AND查询一对多表联接

初试 Elastic Search

elastic search 常用查询

Elastic Search之布尔查询

Elastic Search 基本操作

search- elastic4s-search-query模式