powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Четверговый поиск в БД like a Google.
60 сообщений из 60, показаны все 3 страниц
Четверговый поиск в БД like a Google.
    #39702232
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет други!

В продолжение топика JDBC необязательные параметры

Надо реализовать имплементацию такого интерфейса.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public interface ILikeAGoogle extends Closeable {

    void setConnection(Connection connection);

    /**
     * Lookup in generic database
     *
     * @param expression - search expression (for ex: "bla-bla")
     * @return collection of pairs : table name, data row (in JSON format).
     *
     * @throws SQLException
     */
    Iterator<Pair<String, Gson>> lookup(String expression) throws SQLException;

}




Приветствуется
1. Восьмерка, девятка-десятка. жигулей. Лямбды-фигамбды. Стримы.
2. Kotlin , Groovy, Java, вобщем все Java-подобное.
3. Перформанс - необязателен. Главное чтоб просто работало корректно.

Не приветствуется
1. Готовые платные решения.
2. Вопрос "зачем" и нудотство.
3. Анонимные чужие сорцы.

Не нужно
1. Текстовые индексы
2. Искать в стрёмных datatypes (BLOB, raw,... e.t.c.). Достаточно varchar, number.

Под катом детали.

1. Используя интерфейс JDBC и фасад ILikeAGoogle и неизвестную БД X мы должны найти список таблиц и список datarows которые содержат
искомое ключевое слово.

2. Собрать jar чтоб можно был так run-нить
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$ java -jar YourCustomDbmsLikeAGoogleSearch.jar "jdbc:oracle:thin:scott/tiger@127.0.0.1:1521/XE" "KING"

Found table EMP:
Found datarow: { empno=7839, ename='KING',  job='PRESIDENT', 
 hiredate='17-11-1981', sal=5000, deptno=10}

$ java -jar YourCustomDbmsLikeAGoogleSearch.jar "jdbc:sqlserver://sql.ru:55555;databaseName=Борей;user=BillGates;password=superBill "Четверговый"

Found table TOPICS:
Found datarow: { author:mayton, tid=283746, text="Четверговый поиск в БД like a Google."}




Предлагайте ваши варианты. У меня своей реализации еще нет.

Go-go кодить!
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704463
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное насчёт одного connection я был не прав. По идее пул надо передать.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704467
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смысл?

Проблем не вижу.

Metadata из JDBC, плюс цикл по таблицам + колонкам, плюс поиск (создание SQL запроса).

@return collection of pairs : table name, data row (in JSON format).
Сложно как-то
проще возвращать table name, column name, value

особенно, если производительность не важна

Искать в стрёмных datatypes (BLOB, raw,... e.t.c.). Достаточно varchar, number.
Date нужно?

Даже с number есть "стремность". Как искать подстроку "1234" ? Т.к. формат чисел вполне может быть:
1 234 567.89
(пробел в качестве разделителя тысячных разрядов)
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704480
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevДаже с number есть "стремность". Как искать подстроку "1234" ? Т.к. формат чисел вполне может быть:
1 234 567.89вот только не надо путать отображение с тем, что хранится
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704487
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяLeonid KudryavtsevДаже с number есть "стремность". Как искать подстроку "1234" ? Т.к. формат чисел вполне может быть:
1 234 567.89вот только не надо путать отображение с тем, что хранится
Тогда перефразирую вопрос:
Как правильно искать подстроку "1234" в хранимом значение ‭000100101101011010000111‬ ?
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704491
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть число хранимое в СУБД:

один миллион двести тридцать четыре тысячи пятсот шестесят сем и восемьдесят девять тысячных

По техническому заданию, в этом числе, ищут подстроку "1234"

Есть ли она там или ее там нет?

Во фразе "один миллион двести тридцать четыре тысячи пятсот шестесят сем и восемьдесят девять тысячных" - "1234" - нет
В представление в формате с пробелом в качестве разделителя тысячных "1 234 567.89" - нет
В двоичном виде в памяти компьютера (без тысячных) "000100101101011010000111‬" - тоже нет

Но, есть подозрение, что mayton считал, что все же, ответ "есть" )))

Хотелось бы конкретизировать Т.З. Как искать строки в number.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704496
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevТогда перефразирую вопрос:
Как правильно искать подстроку "1234" в хранимом значение ‭000100101101011010000111
поле в котором записано‭ 000100101101011010000111 - какой тип имеет? строковый ? инт?

Leonid KudryavtsevВо фразе "один миллион двести тридцать четыре тысячи пятсот шестесят сем и восемьдесят девять тысячных" - "1234" - нет
В представление в формате с пробелом в качестве разделителя тысячных "1 234 567.89" - нет
В двоичном виде в памяти компьютера (без тысячных) "000100101101011010000111‬" - тоже нет
если искать where поле like '%1234%' найдет
потому как поле будет преобразовано в строку 1234567.89
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704497
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

я такое уже показывал 21673479
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704504
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

если свяжешься со мной - могу продемонстрировать поиск с использованием like
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704511
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevDate нужно?

Давайте подумаем. Допустим я ищу 16-mar-2018.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704513
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяполе в котором записано‭ 000100101101011010000111 - какой тип имеет? строковый ? инт?
это не поле, это электрончики в микросхеме памяти

"вот только не надо путать отображение с тем, что хранится" ( C ) вадя

Упростим вопрос, число
один миллион двести тридцать четыре тысячи пятсот шестесят сем и восемьдесят девять тысячных

содержит ли следующие подстроки:
67.89
67,89
?

Какую именно подстроку найдет Ваш like? (с group separator я что-то загнул, на Oracle с первого раза пример соорудить не получилось)

вот лично у меня на компьютере, в данный момент, like вообще работает так:

SQL> desc xx_test
Name Null? Type
----------------------------------------- -------- ----------------------------
N NUMBER

SQL> select count(*) from xx_test where n like '%67.89%';

COUNT(*)
----------
0

SQL> select count(*) from xx_test where n like '%67,89%';

COUNT(*)
----------
0

SQL> select count(*) from xx_test where n like '%67a89%';

COUNT(*)
----------
1
Код: plaintext
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704515
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавайте подумаем. Допустим я ищу 16-mar-2018.смотря где искать
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704520
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Даже с number есть "стремность". Как искать подстроку "1234" ? Т.к. формат чисел вполне может быть:
1 234 567.89
(пробел в качестве разделителя тысячных разрядов)
Если число целое то я вообще не вижу проблемы.
Символы группировки можно убрать и искать как строку.

Decimal - приводить к единой форме с точкой и искать.

Float и double - не надо вообще.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704521
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmayton,

если свяжешься со мной - могу продемонстрировать поиск с использованием like
Куда? У нас что, клуб личных встреч?

Пиши сюда. У меня нет секретов.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704526
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКуда? У нас что, клуб личных встреч?

Пиши сюда. У меня нет секретов.у меня нет публичного постоянно работающего сервера - поэтому могу только на время предоставить доступ
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704527
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я к тому, что искать подстроки в любых других типах данных, отличных от char/string, можно только договорившись о дефальтном настройке форматов преобразования типов

если с числами, это еще не так очевидно, то с Date это уже в полный рост

Т.ч., в общем, если выкинуть "Искать в стрёмных datatypes" то кроме String-подобных типов + Number + Date ничего и не остается.

Но и то, для number, хорошо бы default group и decimal separator обговорить. Но тогда, аналогично, и формат для Date
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704529
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonКуда? У нас что, клуб личных встреч?

Пиши сюда. У меня нет секретов.у меня нет публичного постоянно работающего сервера - поэтому могу только на время предоставить доступ
Ты что женщина?
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704534
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonFloat и double - не надо вообще.ну не надо так не надо
но уже
таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE test.z1 (
  id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  nn float(8, 4) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 2,
CHARACTER SET utf8,
COLLATE utf8_general_ci;


данные"id""nn"164867,892454,779

запрос
Код: sql
1.
2.
3.
4.
5.
SELECT
  z1.id,
  z1.nn
FROM z1
WHERE z1.nn LIKE '%67.89%'


результат"id""nn"164867,89
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704535
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТы что женщина?нет, ну не оставлять же комп шуметь пока не используется :)
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704536
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevя к тому, что искать подстроки в любых других типах данных, отличных от char/string, можно только договорившись о дефальтном настройке форматов преобразования типов

если с числами, это еще не так очевидно, то с Date это уже в полный рост

Т.ч., в общем, если выкинуть "Искать в стрёмных datatypes" то кроме String-подобных типов + Number + Date ничего и не остается.

Но и то, для number, хорошо бы default group и decimal separator обговорить. Но тогда, аналогично, и формат для Date
Давайте пока в режиме XP.

Будем копить поиск строк в строках.

А потом я оформлю user story для расширенных поисков .
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704539
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНо и то, для number, хорошо бы default group и decimal separator обговорить. Но тогда, аналогично, и формат для Date
не путайте отображение с хранением!!!!!
авторdecimal separatorэто только для вывода.

если у тебя число/дата хранится в строке - то тут уже трудно о чём-то договариваться
если в отдельных полях - проблем вообще нет
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704540
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonТы что женщина?нет, ну не оставлять же комп шуметь пока не используется :)
Мне не интересно смотреть на готовые коробочные решения.

Я дал тему. Хочешь - кодь. Не хочешь - подними другой топик где будет твоя тема и твой продукт.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704541
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМне не интересно смотреть на готовые коробочные решения.

Я дал тему. Хочешь - кодь. Не хочешь - подними другой топик где будет твоя тема и твой продукт.как хочешь
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704550
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяLeonid KudryavtsevНо и то, для number, хорошо бы default group и decimal separator обговорить. Но тогда, аналогично, и формат для Date
не путайте отображение с хранением!!!!!

Это ты путаешь!

Вот лично у меня, like ни с точкой, ни с запятой ничего не находит. А находит с буковкой "a" вместо decimal separator. См. споллер в сообщение выше.

А хранится оно вообще в виде электрончиков на кремниевой подложке. Обычно обозначаемых как кучка единичек и ноликов.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704553
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВот лично у меня, like ни с точкой, ни с запятой ничего не находит. А находит с буковкой "a" вместо decimal separator. См. споллер в сообщение выше.а у меня находит, я волшебник?
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704556
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Mayton.

Ты такую порнографию хотел увидеть? Типо на знание присутсвия MetaData в JDBC ?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
package test_jvm;

import oracle.jdbc.driver.*;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class DbSearcher {
 
	public static final String host ="";
	public static final String sid = "";
	public static final String user = "";
	public static final String pwd = "";

	public static ArrayList<String> getColumns( Connection conn, String schemaName,  String tableName ) throws SQLException {
    	ArrayList<String> fields = new ArrayList<String>();
		DatabaseMetaData meta = conn.getMetaData();
    	ResultSet rsetCol = meta.getColumns( null, schemaName, tableName, null );
    	while (rsetCol.next() ) {
    		String colName = rsetCol.getString(4);
    		fields.add( colName );
    	}
    	rsetCol.close();
    	return fields;
	}
	public static String formatOutput( ArrayList<String> fields, ResultSet rset ) throws SQLException {
		StringBuilder res;
		res = new StringBuilder();
		int pos = 1;
		res.append( "{ " );
		for ( String s:fields ) {
			if ( pos>1 ) {
				res.append( ", " );
			}
			String val = rset.getString( pos++ );
			res.append( s );
			res.append( "=" );
			res.append( val );
		}
		res.append( " }" );
		return res.toString();
	}
    public static void stupedSearch( Connection conn, String schemaName,  String tableName, String subStr ) throws SQLException
    {
    	ArrayList<String> fields;
    	fields=getColumns( conn, schemaName, tableName );
    	StringBuilder sql;
    	sql = new StringBuilder();
    	sql.append( "SELECT * FROM "+schemaName+"."+tableName+" WHERE 1=0 " );
    	for ( String s:fields) {
    		sql.append( " OR " );
    		sql.append( s );
    		sql.append( " like :" );
    		sql.append( s );
    		sql.append( " " );
    	}
    	System.out.println( "Search in table "+schemaName+"."+tableName );
    	System.out.println( "sql="+sql.toString() );
    	PreparedStatement stmt;
    	stmt = conn.prepareStatement( sql.toString() );
    	int pos = 1;
    	for ( String s:fields ) {
    		stmt.setString( pos++, "%"+subStr+"%" );
    	}
    	ResultSet rset = stmt.executeQuery();
    	while ( rset.next() ) {
    		System.out.println( formatOutput( fields, rset ) );
    	}
    	rset.close();
    	stmt.close();
    	System.out.println( "search finished" );
    }
    
	public static void main(String[] args) throws SQLException {
		// TODO Auto-generated method stub
		String searchString = "153666";
		java.sql.Connection conn;
		DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
		conn = DriverManager.getConnection
				  ("jdbc:oracle:thin:@"+host+":1521:"+sid, user, pwd );
		DatabaseMetaData meta = conn.getMetaData();
		ResultSet rset1, rset2;
		stupedSearch( conn, "MSM", "CSC_OBJECT", searchString );
/*		
		rset1 = meta.getSchemas();
		while ( rset1.next() ) {
			String schemaName = rset1.getString( 1 );
			System.out.println( "schema "+schemaName );
			rset2 = meta.getTables( null, schemaName, null, null );
			while ( rset2.next() ) {
				String tableName = rset2.getString( 3 );
				System.out.println( schemaName+"."+tableName );
		        stupedSearch( conn, schemaName, tableName, "test" );
			}	
			rset2.close();
		}
		rset1.close();
*/
		System.out.println( "OK" );
	}

}




Search in table MSM.CSC_OBJECT
sql=SELECT * FROM MSM.CSC_OBJECT WHERE 1=0 OR ID like :ID OR TYPE_RE like :TYPE_RE OR CREATE_METHOD like :CREATE_METHOD OR START_DATE like :START_DATE OR DATE_IN like :DATE_IN OR TAC_ID like :TAC_ID OR USR like :USR OR DWELLING like :DWELLING OR MSM_ID like :MSM_ID OR NAME like :NAME OR LOCATION like :LOCATION OR END_DATE like :END_DATE OR OBJ_ID like :OBJ_ID OR ADR_ID like :ADR_ID OR AREA_SIZE like :AREA_SIZE OR HEIGHT like :HEIGHT OR INSTALL_DATE like :INSTALL_DATE OR PROHIBIT_REASON like :PROHIBIT_REASON OR VER like :VER OR POPULATION like :POPULATION OR FLAG_WORK like :FLAG_WORK OR ROOF_AREA like :ROOF_AREA OR PAVE_AREA like :PAVE_AREA OR SOIL_AREA like :SOIL_AREA OR LAWN_AREA like :LAWN_AREA OR FLAG_INP like :FLAG_INP OR FLAG_OUT like :FLAG_OUT OR FLOORS like :FLOORS OR MSM_NAME like :MSM_NAME OR ROAD_AREA like :ROAD_AREA OR FLAG_ORA like :FLAG_ORA OR FLAG_PDK like :FLAG_PDK OR CAD_TAG like :CAD_TAG OR OD_AREA like :OD_AREA OR AREA_REMARK like :AREA_REMARK OR WAHOR_POWER like :WAHOR_POWER OR WATER_DEPTH like :WATER_DEPTH OR FLAG_FILTR like :FLAG_FILTR OR TRO_ID like :TRO_ID OR LENGTH_DRAIN like :LENGTH_DRAIN OR WIDTH_DRAIN like :WIDTH_DRAIN OR DEPTH_DRAIN like :DEPTH_DRAIN OR FLAG_DRAIN like :FLAG_DRAIN OR VOLUME_DRAIN like :VOLUME_DRAIN OR APD_ID like :APD_ID OR GIS_ID like :GIS_ID OR FLG_COMPLEX like :FLG_COMPLEX OR IMPROVEMENT_ID like :IMPROVEMENT_ID OR LIFE_REQUEST like :LIFE_REQUEST OR LIFE_REQUEST_DESC like :LIFE_REQUEST_DESC OR ARMOR_TECHNOLOGICAL like :ARMOR_TECHNOLOGICAL OR ARMOR_EMERGENCY like :ARMOR_EMERGENCY OR REGISTERED_PEOPLE like :REGISTERED_PEOPLE OR TOTAL_AREA like :TOTAL_AREA OR COMMON_AREA like :COMMON_AREA OR TFI_ID_RV like :TFI_ID_RV OR TFI_ID_RK like :TFI_ID_RK OR OKS like :OKS OR CAD_TAG_ZU like :CAD_TAG_ZU OR TPU_ID like :TPU_ID OR BUSH_AREA like :BUSH_AREA OR COMMON_AREA_1 like :COMMON_AREA_1 OR COMMON_AREA_2 like :COMMON_AREA_2 OR FLAG_124 like :FLAG_124 OR VCKP_FLOORS like :VCKP_FLOORS OR VCKP_IMPROVEMENT like :VCKP_IMPROVEMENT OR IS_ODPU like :IS_ODPU OR COUNT_FLAT like :COUNT_FLAT OR ZNOP_ID like :ZNOP_ID OR OSGC_ID like :OSGC_ID OR GIS_GKH like :GIS_GKH OR OWNERS like :OWNERS OR WATER_AREA like :WATER_AREA


{ ID=153666, TYPE_RE=1, CREATE_METHOD=1, START_DATE=2000-04-27 15:31:36.0, DATE_IN=2000-04-27 15:31:36.0, TAC_ID=2, USR=MSM, DWELLING=1, MSM_ID=61637/89W, NAME=Многоквартирный дом, LOCATION=null, END_DATE=null, OBJ_ID=null, ADR_ID=186998, AREA_SIZE=null, HEIGHT=null, INSTALL_DATE=null, PROHIBIT_REASON=null, VER=1, POPULATION=null, FLAG_WORK=1, ROOF_AREA=null, PAVE_AREA=null, SOIL_AREA=null, LAWN_AREA=null, FLAG_INP=N, FLAG_OUT=N, FLOORS=null, MSM_NAME=ЖИЛОЙ ДОМ, ROAD_AREA=null, FLAG_ORA=N, FLAG_PDK=Y, CAD_TAG=1676:0:49, OD_AREA=null, AREA_REMARK=null, WAHOR_POWER=null, WATER_DEPTH=null, FLAG_FILTR=null, TRO_ID=null, LENGTH_DRAIN=null, WIDTH_DRAIN=null, DEPTH_DRAIN=null, FLAG_DRAIN=null, VOLUME_DRAIN=null, APD_ID=null, GIS_ID=180895, FLG_COMPLEX=N, IMPROVEMENT_ID=null, LIFE_REQUEST=N, LIFE_REQUEST_DESC=null, ARMOR_TECHNOLOGICAL=N, ARMOR_EMERGENCY=N, REGISTERED_PEOPLE=null, TOTAL_AREA=null, COMMON_AREA=null, TFI_ID_RV=8150, TFI_ID_RK=8340, OKS=Y, CAD_TAG_ZU=null, TPU_ID=null, BUSH_AREA=null, COMMON_AREA_1=null, COMMON_AREA_2=null, FLAG_124=N, VCKP_FLOORS=null, VCKP_IMPROVEMENT=null, IS_ODPU=null, COUNT_FLAT=null, ZNOP_ID=null, OSGC_ID=null, GIS_GKH=Y, OWNERS=null, WATER_AREA=null }


{ ID=336932, TYPE_RE=1, CREATE_METHOD=1, START_DATE=2013-11-15 11:57:30.0, DATE_IN=2013-11-15 11:57:30.0, TAC_ID=45, USR=MSM, DWELLING=2, MSM_ID=153666/00R, NAME=Детская площадка, LOCATION=null, END_DATE=null, OBJ_ID=null, ADR_ID=138802, AREA_SIZE=null, HEIGHT=null, INSTALL_DATE=null, PROHIBIT_REASON=null, VER=1, POPULATION=null, FLAG_WORK=1, ROOF_AREA=null, PAVE_AREA=null, SOIL_AREA=null, LAWN_AREA=null, FLAG_INP=Y, FLAG_OUT=null, FLOORS=null, MSM_NAME=null, ROAD_AREA=null, FLAG_ORA=N, FLAG_PDK=N, CAD_TAG=78:14:7645А:1016, OD_AREA=null, AREA_REMARK=null, WAHOR_POWER=null, WATER_DEPTH=null, FLAG_FILTR=null, TRO_ID=null, LENGTH_DRAIN=null, WIDTH_DRAIN=null, DEPTH_DRAIN=null, FLAG_DRAIN=null, VOLUME_DRAIN=null, APD_ID=null, GIS_ID=null, FLG_COMPLEX=N, IMPROVEMENT_ID=null, LIFE_REQUEST=N, LIFE_REQUEST_DESC=null, ARMOR_TECHNOLOGICAL=N, ARMOR_EMERGENCY=N, REGISTERED_PEOPLE=null, TOTAL_AREA=null, COMMON_AREA=null, TFI_ID_RV=null, TFI_ID_RK=8370, OKS=Y, CAD_TAG_ZU=null, TPU_ID=null, BUSH_AREA=null, COMMON_AREA_1=null, COMMON_AREA_2=null, FLAG_124=N, VCKP_FLOORS=null, VCKP_IMPROVEMENT=null, IS_ODPU=null, COUNT_FLAT=null, ZNOP_ID=null, OSGC_ID=null, GIS_GKH=null, OWNERS=null, WATER_AREA=null }

search finished
OK
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704558
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, круть.

Но не спешите. Я все таки переделаю интерфейс. Добавлю детекторы Date, Number.
Больше входных параметров. И не один коннекшен а много для параллелизма.

Далее мне нужна будет толстая БД для симуляции поисков. И надо вкомпилировать
хард-кодом в сборку штук 10-20 разных JDBC драйверов чтоб летало везде.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704560
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonLeonid Kudryavtsev, круть.

Но не спешите. Я все таки переделаю интерфейс. Добавлю детекторы Date, Number.
Больше входных параметров. И не один коннекшен а много для параллелизма.

Далее мне нужна будет толстая БД для симуляции поисков. И надо вкомпилировать
хард-кодом в сборку штук 10-20 разных JDBC драйверов чтоб летало везде.


Нахрена?

На моей БД (пара десятков терабайт) оно пару десятков минут, если не часов, искать будет
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704561
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Код: java
1.
2.
3.
4.
5.
 		sql.append( " OR " );
    		sql.append( s );
    		sql.append( " like :" );
    		sql.append( s );
    		sql.append( " " );


ты зачем трмозной вариант используешь?

так быстрее
Код: java
1.
 		sql.append( " OR " ).append( s ).append( " like :" ).append( s ).append( " " );
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704562
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevmaytonLeonid Kudryavtsev, круть.

Но не спешите. Я все таки переделаю интерфейс. Добавлю детекторы Date, Number.
Больше входных параметров. И не один коннекшен а много для параллелизма.

Далее мне нужна будет толстая БД для симуляции поисков. И надо вкомпилировать
хард-кодом в сборку штук 10-20 разных JDBC драйверов чтоб летало везде.


Нахрена?

На моей БД (пара десятков терабайт) оно пару десятков минут, если не часов, искать будет
Это... прекрасно.

Как раз есть повод развернуть параллелизм. С другой стороны я писал в родительском топике
что заказчик такой работы - говорит что надо найти любой ценой. Сутки? Окей. Тоже катит.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704563
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторappend( " like :" ).
это уже под конкретную субд закос
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704564
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя, до core-review мы еще не дошли. Но КМК ты смотришь на оптимизацию под неверным углом.

Нужно во первых понять что для данного приложения именно это место будет bottle-neck. А я готов
спорить на виски что на самом деле оно есть! но не здесь! А совсем в другом месте.

Во вторых я предлагаю тебе дизассемблировать сборку в двух вариантах и посмотреть какой на самом
деле javac cобирает код. Очень многие паттерны строковых оптимизаций стали бесполезны после семерки
и восьмерки. Вспомни какие ::toString() имплементации генерит твоя IDE.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704567
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяавторappend( " like :" ).
это уже под конкретную субд закос
Вообще-то, нет. Двоиточие вроде стандарт ANSI. Хотя не уверен. Пофиг.

Можно поменять на ?
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704568
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
люди уже много чего сделали
https://habr.com/post/330220/
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704571
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяты зачем трмозной вариант используешь?

так быстрее

Вообще-то IMHO фиолетово.
совершенно одинаковая конструкция, которая и выполняться должна совершенно одинаково

Не люблю длинных строк в коде. Много коротких строк, проще ошибку найти. И по java сообщению об ошибке (строка выводится, а позиция нет), да и под отладчиком ходить и ставить бряк-поинты удобнее.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704572
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВообще-то, нет. Двоиточие вроде стандарт ANSI. Хотя не уверен. Пофиг.

Можно поменять на ?
в mysql
like '%xxx%'
если так
поле COLLATE utf8_general_ci like '%xxx%'
то ищет без учёта регистра
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704573
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmayton,
люди уже много чего сделали
https://habr.com/post/330220/
Сразу поверил в статью 2017 года?
Может все таки продизассемблируешь.

P.S. На самом деле я невкурсе девятки и десятки. Но разве у тебя нет инженерного любопытства?
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704574
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНе люблю длинных строк в коде
Код: java
1.
2.
3.
4.
5.
sql.append( " OR " )
.append( s )
.append( " like :" )
.append( s )
.append( " " );



Leonid Kudryavtsevсовершенно одинаковая конструкция, которая и выполняться должна совершенно одинаково https://habr.com/post/330220/
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704575
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы спорите о пустяках. Не жаль времени?
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704576
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmayton,
люди уже много чего сделали
https://habr.com/post/330220/

Hotspot JVM находит new StringBuilder().append(x).append(y) .toString() паттерны

В моем и твоем коде этого нет


обходясь без создания промежуточных объектов.

создания объектов и так нет
похоже, подразумевают создания объекта StringBuilder.
Но опять таки, это не наш случай. Нам все равно StringBuilder нужен, т.к. конкатенируем в цикле
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704577
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonP.S. На самом деле я невкурсе девятки и десятки. Но разве у тебя нет инженерного любопытства?я пока под 10 перевожу то что есть, пока не до исследования.
и без того проблем хватает
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704578
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНо опять таки, это не наш случай. Нам все равно StringBuilder нужен, т.к. конкатенируем в цикле
разница в sql.append( " OR " )
.append( s )
.append( " like :" )
.append( s )
.append( " " );

sql.append( " OR " );
sql.append( s );
sql.append( " like :" );
sql.append( s );
sql.append( " " );
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704581
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя...разница в ...
бечмарк в студию

Ссылка на статью - не катит. Там совршенно про другой паттерн расказывают.
new, append, toString

а пока - какие-то сказки. Почему три операции записанные в одну строчку, должны быть быстрее, чем те же три операции записанные через перевод строки - какие-то сказки.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704586
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonP.S. На самом деле я невкурсе девятки и десятки. Но разве у тебя нет инженерного любопытства?я пока под 10 перевожу то что есть, пока не до исследования.
и без того проблем хватает
Жаль.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704594
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevа пока - какие-то сказки. Почему три операции записанные в одну строчку, должны быть быстрее, чем те же три операции записанные через перевод строки - какие-то сказки.там есть ссылка и на доклад
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704609
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmayton,

если свяжешься со мной - могу продемонстрировать поиск с использованием like
хаха ржака. самый очевидный вариант если в детали не вчитываться. я думаю там что-то иное подразумевалось. не? ))
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704615
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
запрос
Код: sql
1.
2.
3.
4.
5.
SELECT
  z1.id,
  z1.nn
FROM z1
WHERE z1.nn LIKE '%67.89%'


результат"id""nn"164867,89

Double/Float - это очень интересные и сложные типы данных. Они сжимают или хешируют вещественный диапазон
чисел как функция класса инъекция на некий ограниченный диапазон констант. Магических чисел. И поиск по
вещественному числу как по строке никогда не делают. Если вы хотите поискать - (Реально???) то я советую
задать некий криетерий близости (эпсиолон) и точку в окрестности которой вы будете искать число максимально
близкое. Это и будет поиск по Double/Float. Так и только так поиск будет осмысленным с математической точки
зрения. Все остальные ваши изобретения в части поиска по Float/Double как по тексту обречены на провал
и на наличие аномалий которые устранить на уровне операций с строками будет невозможно.

Поэтому, я вас прошу оставить вещественный тип в покое
до лучших времен.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704625
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ахтунг!

Изменения в задании №1.

Обновлённый интерфейс.
- поддержим пул коннектов
- итератор нафиг. Будет Stream.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
/**
 *
 * @see "http://www.sql.ru/forum/1302448/chetvergovyy-poisk-v-bd-like-a-google"
 */
public interface ILikeAGoogle extends Closeable {

    /**
     * Set jdbc connection string
     * Example: 'jdbc:oracle:thin:scott/tiger:127.0.0.1:1521/XE'
     *
     * @param url
     */
    void setConnectionString(String url);

    /**
     * Get SQL connection from pool
     *
     * @return
     */
    Connection getConnectionFromPool();
    
    /**
     * Lookup in generic database
     *
     * @param expression - search expression (for ex: "bla-bla")
     * @return collection of pairs : table name, data row (in JSON format).
     *
     * @throws SQLException
     */
    Stream<Pair<String, Gson>> lookup(String expression) throws SQLException;

}



Go-go кодить!
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39704650
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTвадяmayton,

если свяжешься со мной - могу продемонстрировать поиск с использованием like
хаха ржака. самый очевидный вариант если в детали не вчитываться. я думаю там что-то иное подразумевалось. не? ))
вариант не совсем очевидный. как ни странно.
демонстрация реализации. с изменением времени от нажатия до отображения . с возможностью добавлять, изменять.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39706591
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В исходнике Леонида нет поддержки интерфейса ILikeAGoogle

Код: java
1.
2.
// TODO: Implement ILikeAGoogle
public class DbSearcher {


Вобщем есть поинт на доработку. Кто возьмется?
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39706701
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще поинты.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    // TODO: Replace ArrayList with List interface
    public static ArrayList<String> getColumns(Connection conn, String schemaName, String tableName ) throws SQLException {
        // TODO: Diamont operator is needed 
        ArrayList<String> fields = new ArrayList<String>();
        DatabaseMetaData meta = conn.getMetaData();
        ResultSet rsetCol = meta.getColumns( null, schemaName, tableName, null );
        while (rsetCol.next() ) {
            String colName = rsetCol.getString(4);
            fields.add( colName );
        }
        rsetCol.close();
        return fields;
    }
    
    // TODO: ArrayList again
    public static String formatOutput( ArrayList<String> fields, ResultSet rset ) throws SQLException {
        StringBuilder res;
        res = new StringBuilder();
        int pos = 1;
        // TODO: Not sure is it good idea to simulate JSon with StringBuilder. No escaping.
        res.append( "{ " );
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39706702
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще парочку.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        System.out.println( "Search in table "+schemaName+"."+tableName );
        System.out.println( "sql="+sql.toString() );
        // TODO: There is no need to prepare statement. Try to use Statement with trivial query.
        PreparedStatement stmt;
        stmt = conn.prepareStatement( sql.toString() );
        int pos = 1;
        for ( String s:fields ) {
            stmt.setString( pos++, "%"+subStr+"%" );
        }
        ResultSet rset = stmt.executeQuery();
        while ( rset.next() ) {
            System.out.println( formatOutput( fields, rset ) );
        }
        // TODO: Hm... What's about try-with-resources?
        rset.close();
        stmt.close();
        System.out.println( "search finished" );
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39706965
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, Практический смысл данного приложения какой?

1) Без обработки типов - практического смысла все равно нет. Тупой like по дефолтному формату - это какой-то говнокод
2) Без возможности выделения пользовательские/служебные поля (прикладная metadata бизнес-приложения) - смысла все равно нет + дыра в секьюрити.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39707037
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, а какой смысл в Google - поиске? Найти строку везде где только можно.

Ты извини ты что там пред поиском все типы указываешь?
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39707055
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonLeonid Kudryavtsev, а какой смысл в Google - поиске?...
Там cache + обработка файла robots.txt.

Взять elastic search и вкачать в него базу - задача осмысленная
А искать like-ами по продуктовой базе, без разделения user поля от system поля - дебилизм и полная дары в секьюрити.

Вы часто по диску ищите в FAR'а нажанием Alt-F7 с корня диска и маской файлов *.* ?

p.s. У нас в базе данных аж переписка с ротенбергами и прочими олигархами встречается. Не думаю, что google поиск с возможностью искать там Навальным и Ко ( C ) не будет считаться "подрывом государственности" ))) Перед тем как давать искать в продуктовых базах, все равно нужно прикладное meta-описание (аналог robots.txt).
По табличке с user name + password тоже искать позволим ?

maytonТы извини ты что там пред поиском все типы указываешь?

А существуют HTML-страницы с типом число или дата?
META content type = number или META content type = date?
Обычно google все же ищет в content type = text/html или text/plain
Т.ч. вопрос не корректный.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39707067
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВы часто по диску ищите в FAR'а нажанием Alt-F7 с корня диска и маской файлов *.* ?

Ты знаешь когда я стартовал этот топик то я знал что будет "страх и ненависть" в каментах.
Потому что этот топик и ко мне прилетал несколько раз лет 10-15 назад. И у меня была 100%
такая-же реакция как у тебя.

По поводу безопасности я 100% согласен. Вообще сомнительно что кто-то позволит крутить
на ПРОД-е такие запросы.

Но у этой задачи несмотря на всю ее абсурдность есть еще и некий элемент "недозавершенности".
Как будто мы здесь эдакие "жрецы баз данных" наложили строгое табу - никогда ничего подобного
не разрабатывать.

Кто критиковал bbed? Кто критиковал john-ripper?

Ты знаешь какая волна ненависти поднимается в топиках Oracle если ты спрошись про bbed?

А это просто грёбаная утилита. Как в NortonUtilites. Которая диски редактирует и файлы в сыром виде.

Просто гребаная утилита. И что?

Мы не можем ее написать? Или у нас такие сильные предубеждения что мы сами себе ее запретили писать?
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39707075
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevА существуют HTML-страницы с типом число или дата?
META content type = number или META content type = date?
Обычно google все же ищет в content type = text/html или text/plain
Т.ч. вопрос не корректный.
Окей если ты хочешь сделать поиск по БД более интеллектуальным - я не против. Предлагай.
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39707080
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто будет пользоваться ? Какие прикладные задачи ?
...
Рейтинг: 0 / 0
Четверговый поиск в БД like a Google.
    #39707086
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонид. Господи. Да это хакатон. Никто не будет пользоваться. Ну хочешь ты пользуйся потом...

Ты что тяпничных и четверговых топиков нечитал?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Четверговый поиск в БД like a Google.
    #39891970
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UP. Чо как? Постановка-то нужна.

Даже текстовый поиск к ней нужно прикручивать.
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Четверговый поиск в БД like a Google.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]