Использование Elastic Search для запросов внутри массивов в CouchDB - PullRequest
1 голос
/ 20 мая 2011

Моя база данных 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 для поиска и поиска терминов, независимо от того, где они находятся в массиве.Это возможно?

Я просматривал примеры на здесь и не совсем нашел то, что искал.Я пытался использовать Elastica, PHP Wrapper , но без полного понимания, как это сделать с REST, я заблудился.Можно ли вообще искать данные, не зная поля?

Ответы [ 2 ]

0 голосов
/ 18 июня 2011

Если вы используете Elastica, все REST уже сделано для вас. Если вы хотите искать во всех полях, вы можете определить только поисковый термин, и он будет искать во всех полях.

Если у вас возникли проблемы с Elastica или вам не хватает некоторых функций, сообщите мне, так как я являюсь разработчиком Elastica.

0 голосов
/ 22 мая 2011

В Lucene вы можете создать экземпляр документа для каждого идентификатора устройства:

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);
}

Это позволит вам осуществлять поиск по ключевым словам в названии колледжа, либо по точному идентификатору устройства или году, либо по некоторой комбинацииего.

...