Использование Lucene QueryAPI для доступа к SQL - PullRequest
0 голосов
/ 17 марта 2011

Можете ли вы посоветовать, могу ли я использовать только функциональность запросов из Lucene для генерации SQL-запросов?Что-то вроде SQLQueryBuilder?

У меня есть обширная база данных SQL журналов из кластера веб-серверов, содержащая исходные строки запроса и ответа, а также некоторые другие полезные / менее важные биты и бобы.Что мне нужно сделать, это проанализировать параметры в исходном запросе и сравнить с сгенерированными ответами, глядя на отношения, волатильность, изменчивость, согласованность и т. Д.

Этот вопрос не относится к стадии анализа, а только кизвлечение данных из базы данных, которые соответствуют параметрам, которые меня интересуют. Итак, я мог бы просто сделать это в старых добрых SQL-запросах, вручную создавая точные запросы, которые мне нужны, в каждом конкретном случае.Но это немного отстойно;Я считаю, что мы можем быть немного умнее этого.Тем более, что я уже вижу большое количество похожих, но слегка отличающихся друг от друга запросов.И так как я надеюсь, что смогу открыть одно окно поиска через веб-интерфейс для нетехнических конечных пользователей, добавление SQL-запросов кажется плохой идеей ... и рецептом для постоянных запросов на обслуживание (и могу ли я бытьВо-первых, нет, спасибо!).

В идеальном мире я предоставляю форму поиска с возможностью писать простые запросы, такие как

request:"someAttribute=\"someValue\"" AND response="some hoped for result" AND daterange:30

, которые, как мы надеемся, затем найдут все экземпляры запросов, которые содержат someAttribute = "someValue" поверхпоследние 30 дней.Затем результаты будут подвергнуты стандартному статистическому анализу по данному тексту ответа и распечатаны на экране.По крайней мере, это идея.

Большая часть реальной логики, чтобы определить, как обрабатывать определения пользовательских полей или специальные слова, которые мне нужно будет написать самому, и это нормально.И, NB, мои нетехнические конечные пользователи достаточно знакомы с xml, чтобы они могли обрабатывать немного синтаксиса attr = "value", по крайней мере, для первой итерации инструмента: D

Итак, я хочучтобы: 1) разрешить пользователям использовать Google-подобный синтаксис поиска (например, через QueryAPI Lucene), чтобы указать текст для сопоставления в журналах 2) разрешить слою манипулировать запросом на основе специальных слов или полей (например, этот слой может быть во времяФаза объекта Java) 3) преобразовать окончательный запрос в SQL-запрос, подходящий для моей схемы базы данных 4) запросить базу данных и выложить обратно набор результатов для статистического анализа 5) pretty-print на сайте:)

Полностью ли ялаять не на то дерево?Похоже, это должно быть возможно, но я не могу найти много на этом.Я немного погуглил по этому вопросу, например, попробовал «Lucene SQLQueryBuilder» в качестве возможного начала, но на самом деле не нашел ничего путного.

Итак, мои вопросы:

  • Кто-нибудь пытался использовать QueryAPI от Lucene, как это раньше?Это сработало?Есть ошибки?
  • Существуют ли лучшие библиотеки API запросов?

Примеры, законченные обсуждения и реализации с открытым исходным кодом были бы наиболее полезными.

Большое спасибо.

NB. Я не думаю, что мне нужны поисковые возможности Lucene как таковые, поскольку я только ищу точные совпадения.Мне просто нужен слой запроса поверх базы данных.

Ответы [ 2 ]

2 голосов
/ 19 марта 2011

У Lucene и SQL очень мало общего, поскольку они используют совершенно другой синтаксис (как упомянул HefferWolf) и разные базовые модели данных. Как ты сам сказал, я боюсь, ты лаешь не на то дерево.

Однако существуют попытки, такие как Hibernate Search , чтобы преодолеть этот пробел. Это интересные эксперименты как таковые, но я бы очень осторожно использовал этот код в производстве.

Вы можете использовать функции полнотекстового поиска, доступные в некоторых базах данных SQL, или переиндексировать все данные в Lucene и использовать их без базы данных.

1 голос
/ 17 марта 2011

Я сомневаюсь, что вы можете использовать любой код из Lucene для этого. Lucene выполняет внутреннюю переписку таких запросов, но в синтаксис, который, я думаю, не очень поможет SQL.

name: Phil AND lastname: Miller AND NOT age: 26

будет переписано в

+name Phil +lastname: Miller -age: 26

Так что я думаю, что вы должны написать свой переход при синтаксисе SQL-запроса.

Но, возможно, вы можете использовать Lucene как таковой для этого. Взгляните на hibernate-search , который очень удобен для простого создания индекса lucene для таблицы sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...