#php #rest #lucene #couchdb #elasticsearch
#php #остальное #lucene #couchdb #эластичный поиск
Вопрос:
Моя база данных 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-оболочку, но, не до конца понимая, как это сделать с помощью REST, я заблудился. Возможно ли вообще выполнять поиск данных, не зная поля?
Ответ №1:
В 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);
}
Это позволит вам осуществлять поиск по ключевым словам в названии колледжа, или по точному идентификатору устройства, или по году выпуска, или по некоторой их комбинации.
Ответ №2:
Если вы используете Elastica, все ОСТАЛЬНОЕ уже сделано за вас. Если вы хотите выполнять поиск по всем полям, вы можете определить только термин поиска, и он будет выполнять поиск по всем полям.
Если у вас возникли какие-то проблемы с Elastica или отсутствуют какие-то функции, которые вам нужны, дайте мне знать, поскольку я разработчик Elastica.
Комментарии:
1. привет, Николас Руфлин, я работаю над эластичным поиском с couchdb. у меня небольшая путаница, как я могу управлять индексом для нескольких пользователей одновременно.
2. для одного пользователя одновременно это работало отлично, но когда я попробовал это для нескольких пользователей одновременно, у него появилось предупреждение (org.apache.commons.httpclient. ПРЕДУПРЕЖДЕНИЕ SimpleHttpConnectionManager getConnectionWithTimeout: SimpleHttpConnectionManager используется неправильно. Убедитесь, что HttpMethod. releaseConnection() вызывается всегда, и только один поток и / или метод использует этот диспетчер соединений одновременно.)