Полный текст взвешивания - PullRequest
2 голосов
/ 17 ноября 2011

У меня есть следующие таблицы:

create table records
(
  record_id int primary key,
  title varchar(250)
);

create table paragraphs
(
  record_id int primary key,
  paragraph varchar(4000)
)

Запись может содержать 1 или более абзацев.И заголовок, и абзац имеют индексированный полнотекстовый поиск.Заголовок должен быть взвешен выше, чем абзацы (пользовательский ввод).

У меня следующий запрос:

select tbl1.*, tbl2.score as title_score, tbl3.score as paragraph_score from records tbl1 
left outer join 
(
   select score(1) as score from recordswhere contains(title, 'test*5', 1) > 0 
) tbl2 on tbl2.record_id = tbl1.record_id
left outer join
(
   select sum(score(1)) as score from paragraphs where contains(paragraph, 'test*2', 1) > 0 group by record_id
) tbl3 on tbl3.record_id = tbl1.record_id
where (tbl2.score > 0 OR tbl3.score > 0)

Нужны левые внешние объединения, потому что заголовок или абзац может иметь поискterm.

Проблема в том, что чем больше абзацев, тем выше их баллы, хотя заголовок должен быть взвешен выше.

Каков наилучший способ исправить это?

1 Ответ

0 голосов
/ 10 февраля 2012

Если вы хотите изменить результаты Oracle Text для оценки, вам следует обратить внимание на Альтернативный и определяемый пользователем рейтинг . Это даст вам разные оценки для всех частей приложения в одном месте, вместо того, чтобы заставлять вас поддерживать эту модифицированную оценку во всех различных областях вашего приложения.

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