powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Full-Text Search в JSON ?
16 сообщений из 16, страница 1 из 1
Full-Text Search в JSON ?
    #39531607
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Послушал Бартунова о реализации jsonb и т.д. и возник вопрос:
На внутренних текстовых полях можно строить полнотекстовые индексы и делаить поиск по ним?
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39531857
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Что значит “внутренние текстовые поля”?
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39531868
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,
если иммутабной функцией можете вернуть своё "унудреннее дегздовое боле" (штобыононезначило) -- можете и построить индекс--шминдекс.

или вам "вообще" ?
какой поиск хотите ? черканите пару формул,чоль.
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39531938
jim0m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
больше похоже на то что автор имел поиск в json, но не осилил формулировку, а так, читая What's New in 10 https://wiki.postgresql.org/wiki/New_in_postgres_10#Full_Text_Search_support_for_JSON_and_JSONB
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39531988
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jim0mбольше похоже на то что автор имел поиск в json, но не осилил формулировку, а так, читая What's New in 10 https://wiki.postgresql.org/wiki/New_in_postgres_10#Full_Text_Search_support_for_JSON_and_JSONB

автор осилил форумлировку, да, именно полнотекстовое индексирование внутренних полей и поиск в них имелся в виду.
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39531992
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqРолг Хупин,
если иммутабной функцией можете вернуть своё "унудреннее дегздовое боле" (штобыононезначило) -- можете и построить индекс--шминдекс.

или вам "вообще" ?
какой поиск хотите ? черканите пару формул,чоль.

Полнотесктовый поиск и хочу, какие тут формулы могут быть?
Именно по отдельным полям, а не весь JSON объект как текст.

"унудреннее дегздовое боле" (штобыононезначило) - это жызондовое полдэ, выражаясь вашим странным езыгом

Full Text Search support for JSON and JSONB
You can now create Full Text Indexes on JSON and JSONB columns.

This involves converting the JSONB field to a `tsvector`, then creating an specific language full-text index on it:
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39532629
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovРолг Хупин,

Что значит “внутренние текстовые поля”?


Я наивно подумал, что можно будет индексировать и искать по внутренним полям JSON, оказалось нет, индексируется весь JSON, в нем ищется.
Например,

Код: 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.
drop table if exists bookdata

create table bookdata
(id  serial NOT NULL PRIMARY KEY,
 info json NOT NULL
)

CREATE INDEX bookdata_fts ON bookdata
               USING gin (( to_tsvector('english',info) ));

INSERT INTO bookdata (info)
VALUES
 ( '{ "title": "The Tattooed Duke", "items": {"product": "Diaper","qty": 24}}'),
 ( '{ "title": "She Tempts the Duke", "items": {"product": "Toy Car","qty": 1}}'),
 ( '{ "title": "The Duke Is Mine", "items": {"product": "Toy Train","qty": 2}}'),
 ( '{ "title": "What I Did For a Duke", "items": {"product": "Toy Train","qty": 2}}'),
 ('{ "title": "King Kong", "items": {"product": "Toy Train","qty": 2}}');

SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info) @@ to_tsquery('duke');            


------ !
SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info) @@ to_tsquery('diaper');            



Мне надо, чтобы "diaper" не индексировался и не находился, но, естественно он будет искаться.
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39532642
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин...
Мне надо, чтобы "diaper" не индексировался и не находился, но, естественно он будет искаться.

я же говорил "черкни пару формул"

предположу (могу врать), что дону хотелось бы этакого:
Код: 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.
drop table if exists bookdata;

create table bookdata
(id  serial NOT NULL PRIMARY KEY,
 info json NOT NULL
);

CREATE INDEX bookdata_fts ON bookdata
               USING gin (( to_tsvector('english',info->'title') ));

INSERT INTO bookdata (info)
VALUES
 ( '{ "title": "The Tattooed Duke", "items": {"product": "Diaper","qty": 24}}'),
 ( '{ "title": "She Tempts the Duke", "items": {"product": "Toy Car","qty": 1}}'),
 ( '{ "title": "The Duke Is Mine", "items": {"product": "Toy Train","qty": 2}}'),
 ( '{ "title": "What I Did For a Duke", "items": {"product": "Toy Train","qty": 2}}'),
 ('{ "title": "King Kong", "items": {"product": "Toy Train","qty": 2}}');

SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info->'title') @@ to_tsquery('duke');            


------ !
SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info->'title') @@ to_tsquery('diaper');            



а то ж дон говорит предложениями , продолжения которых он не понимает.

т.е. создаёт т.с. шизофазные смеси из известных ему но непонятых им лексем. почти более чем полностью лишенные смысла.
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39532648
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqРолг Хупин...
Мне надо, чтобы "diaper" не индексировался и не находился, но, естественно он будет искаться.

я же говорил "черкни пару формул"

предположу (могу врать), что дону хотелось бы этакого:
Код: 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.
drop table if exists bookdata;

create table bookdata
(id  serial NOT NULL PRIMARY KEY,
 info json NOT NULL
);

CREATE INDEX bookdata_fts ON bookdata
               USING gin (( to_tsvector('english',info->'title') ));

INSERT INTO bookdata (info)
VALUES
 ( '{ "title": "The Tattooed Duke", "items": {"product": "Diaper","qty": 24}}'),
 ( '{ "title": "She Tempts the Duke", "items": {"product": "Toy Car","qty": 1}}'),
 ( '{ "title": "The Duke Is Mine", "items": {"product": "Toy Train","qty": 2}}'),
 ( '{ "title": "What I Did For a Duke", "items": {"product": "Toy Train","qty": 2}}'),
 ('{ "title": "King Kong", "items": {"product": "Toy Train","qty": 2}}');

SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info->'title') @@ to_tsquery('duke');            


------ !
SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info->'title') @@ to_tsquery('diaper');            



а то ж дон говорит предложениями , продолжения которых он не понимает.

т.е . создаёт т.с. шизофазные смеси из известных ему но непонятых им лексем. почти более чем полностью лишенные смысла .

жжош, чтобы не сказать: *ишь
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39532658
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqРолг Хупин...
Мне надо, чтобы "diaper" не индексировался и не находился, но, естественно он будет искаться.

я же говорил "черкни пару формул"

предположу (могу врать), что дону хотелось бы этакого:
Код: 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.
drop table if exists bookdata;

create table bookdata
(id  serial NOT NULL PRIMARY KEY,
 info json NOT NULL
);

CREATE INDEX bookdata_fts ON bookdata
               USING gin (( to_tsvector('english',info->'title') ));

INSERT INTO bookdata (info)
VALUES
 ( '{ "title": "The Tattooed Duke", "items": {"product": "Diaper","qty": 24}}'),
 ( '{ "title": "She Tempts the Duke", "items": {"product": "Toy Car","qty": 1}}'),
 ( '{ "title": "The Duke Is Mine", "items": {"product": "Toy Train","qty": 2}}'),
 ( '{ "title": "What I Did For a Duke", "items": {"product": "Toy Train","qty": 2}}'),
 ('{ "title": "King Kong", "items": {"product": "Toy Train","qty": 2}}');

SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info->'title') @@ to_tsquery('duke');            


------ !
SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info->'title') @@ to_tsquery('diaper');            



а то ж дон говорит предложениями , продолжения которых он не понимает.

т.е. создаёт т.с. шизофазные смеси из известных ему но непонятых им лексем. почти более чем полностью лишенные смысла.


Продолжим наше *донистое обсуждение:

1. дропнул свой индекс, создал такой, как вы написали выше

Код: sql
1.
2.
CREATE INDEX bookdata_fts2 ON bookdata
               USING gin (( to_tsvector('english',info->'title') ));



2. Это сработало, не выбрало ни одной записи, хорошо:
Код: sql
1.
2.
3.
SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info->'title') @@ to_tsquery('diaper'); 



3. Почему этот запрос выбрал 3 записи? мы же проиндексировали только одно поле:

Код: sql
1.
2.
3.
SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info) @@ to_tsquery('diaper');
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39532668
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

йцукен, как говорят благородные доны.
ну ганглий отключи от генериловки шизофазий (т.е. синтеза)
и включи на анализ собственных сверхидей
"балансируй, кетчуп"

или посмотри планы, и подумай, как оно все довольно просто унутре без всякой магии и бреда устроено

вот я накидал тут от скуки еще кейсик:

Код: 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.
drop table if exists bookdata;

create table bookdata
(id  serial NOT NULL PRIMARY KEY,
 info json NOT NULL
);

CREATE INDEX bookdata_fts ON bookdata
               --USING gin (( to_tsvector('english',info->'title') ));/*
		USING gin (( to_tsvector('english',info) )); --*/

INSERT INTO bookdata (info)
VALUES
 ( '{ "title": "The Tattooed Duke", "items": {"product": "Diaper","qty": 24}}'),
 ( '{ "title": "She Tempts the Duke", "items": {"product": "Toy Car","qty": 1}}'),
 ( '{ "title": "The Duke Is Mine", "items": {"product": "Toy Train","qty": 2}}'),
 ( '{ "title": "What I Did For a Duke", "items": {"product": "Toy Train","qty": 2}}'),
 ('{ "title": "King Kong", "items": {"product": "Toy Train","qty": 2}}');

INSERT INTO bookdata (info) SELECT 
('{ "title": "King Kong Peace'||' Duke '|| g || ' ", "items": {"product": "Toy Train","qty": 2}}')::jsonb
FROM generate_series(0,10000) g;

VACUUM ANALYZE bookdata;

explain 
SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info) @@ to_tsquery('duke') --NO ind scan 
	AND to_tsvector('english',info->'title') @@ to_tsquery('duke');--+recheck


------ !
explain
SELECT info -> 'title' as title
FROM bookdata
WHERE 	to_tsvector('english',info) @@ to_tsquery('diaper') --ind scan
	AND to_tsvector('english',info->'title') @@ to_tsquery('diaper');--+filter==recheck

-- унутре неонка:
SELECT to_tsvector('english',info) as title
	,to_tsvector('english',info::text) as title2
FROM bookdata
WHERE 	to_tsvector('english',info) @@ to_tsquery('diaper')
;
--'diaper':5 'duke':3 'tattoo':2
--''24':9 'diaper':7 'duke':4 'item':5 'product':6 'qti':8 'tattoo':3 'titl':1'
-- т.е. сермяга в том, что не индексируются в лексемы теги жейсона -- их имена
-- и прочий мета--мусор

...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39532674
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я - тормоз, а ты дон.


Да теги мне и не нужны, по идее - это разные индексы, и они используются при поиске

--1
CREATE INDEX bookdata_fts2 ON bookdata
USING gin (( to_tsvector('english',info->'title') )); -- здесь индексируется только одно жысоновское поле
--2
CREATE INDEX bookdata_fts ON bookdata
USING gin (( to_tsvector('english',info) )); -- здесь индексируется весь JSON объект

и, следовательно, значения полей (например - 'diaper'), не входящих в индекс не должны находиться, а по факту они находятся

Или правильно сказать так:

Поля с искомым значением будут находиться в любом случае? в чем тогда разница - индекс на весь жысон или на оотдельные поля?
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39532675
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин3. Почему этот запрос выбрал 3 записи? мы же проиндексировали только одно поле:

Код: sql
1.
2.
3.
SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info) @@ to_tsquery('diaper');



Hmm идея что один и тот же запрос может возвращать разные результаты в зависимости от того что именно вы индексировали - она в SQL весьма неожиданна. Вполне логично что база при отсутствии подходящего индекса делает seq scan и так или иначе отдает все подходящие под ваш запрос строки.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39532676
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

дон просто со вчерашнего не просох
давит батоны из последних сил
подумать некогда
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39532690
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukРолг Хупин3. Почему этот запрос выбрал 3 записи? мы же проиндексировали только одно поле:

Код: sql
1.
2.
3.
SELECT info -> 'title' as title
FROM bookdata
WHERE to_tsvector('english',info) @@ to_tsquery('diaper');



Hmm идея что один и тот же запрос может возвращать разные результаты в зависимости от того что именно вы индексировали - она в SQL весьма неожиданна . Вполне логично что база при отсутствии подходящего индекса делает seq scan и так или иначе отдает все подходящие под ваш запрос строки.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru

Не думаю, что в самом SQL.

Возможно меня сбивает с толку то, что в SQL Server, если не построить полнотекстовый индекс на поле,
то FTS запросы к такой таблице будут возвращать ошибку.
...
Рейтинг: 0 / 0
Full-Text Search в JSON ?
    #39532726
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинВозможно меня сбивает с толку то, что в SQL Server, если не построить полнотекстовый индекс на поле,
то FTS запросы к такой таблице будут возвращать ошибку.
Однозначно сбивает. Postgresql ничего не скажет, пойдёт честный seqscan делать.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Full-Text Search в JSON ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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