Бизнес-требование требует, чтобы при реализации решения для полнотекстового поиска определенные поля поиска имели больший вес, чем другие. Хотя я обнаружил, что вы можете добавить вес самим поисковым терминам, я не уверен, что они удовлетворяют наши потребности.
Позвольте мне предоставить базовую настройку c, и, возможно, я что-то упустил в Настройка, а не во время запроса, или и то, и другое?
Основа c Настройка для создания Oracle Текстового индекса с использованием многоколоночного хранилища данных.
Я создаю таблицу из 40 столбцов от имени адрес, номер телефона, бизнес и т. д. c.
create table full_search_tab
( id integer
, dummy_search_col char(1)
, first_name varchar2(30)
, middle_name varchar2(30)
, last_name varchar2(50));
Затем я создаю предпочтение для хранилища данных (на самом деле я включу все 40 столбцов в список столбцов, но перечислю только несколько для демонстрация):
exec ctx_ddl.create_preference('multi_ds', 'MULTI_COLUMN_DATASTORE');
exec ctx_ddl.set_attribute('multi_ds', 'columns', 'LAST_NAME,FIRST_NAME,MIDDLE_NAME');
Я создаю индекс:
create index full_search_mcds_ctx_idx on full_search_tab(dummy_search_col) indextype IS ctxsys.context
parameters ('datastore multi_ds');
Теперь, когда я запрашиваю индекс, он будет вести себя как поиск в Google. Мы передадим текст произвольной формы в запрос, где все термины используют оператор AND. Мы хотим, чтобы попадания в определенные столбцы были взвешены выше, чем в других => с предоставлением модифицированного скоринга. Например, мы всегда хотим, чтобы столбец last_name при сопоставлении с любым из терминов был взвешен выше, чем все остальные, а middle_name - с взвешиванием ниже.
В чем я не уверен, возможно ли это сделать ? Это делается с настройками до индексации? Или это с каждым запросом?
Для тех, кто знаком с запросами Elasticsearch, я хотел бы повторить синтаксис этого запроса, используя Oracle Текст, если это возможно:
GET full_search_mcds_ctx_idx/_search
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"type":"cross_fields",
"query": "john m smith",
"operator": "and",
"fields": [
"LastName^2",
"MiddleName^0.2",
"FirstName^1.2"]
}
}
]
}
},
"size": 0
}