Pergunta

Eu criei um armazenamento de dados de coluna múltiplos em uma tabela que me permite fazer a indexação de texto completo sobre a mesa. O que eu preciso ser capaz de fazer é de peso cada um diferente coluna e adicione a pontuação juntos.

As seguintes obras de consulta, mas é lenta:

SELECT document.*, Score(1) + 2*Score(2) as Score
FROM document
WHERE (CONTAINS(documentContent, 'the_keyword', 1) > 0
OR CONTAINS(documentTitle, 'the_keyword', 2) > 0 )
ORDER BY Score DESC

Depois de um pouco de Googling, as pessoas têm proposto a solução como:

SELECT document.*, Score(1) as Score
FROM document
WHERE CONTAINS(dummy, '(((the_keyword) within documentTitle))*2 OR ((the_keyword) within documentText)',1) > 0)
ORDER BY Score Desc

A consulta acima é mais rápido que seu antecessor, mas isso não resolve o problema real. Neste caso, se a palavra-chave é encontrada no DocumentTitle, não vai procurar o DocumentText (ele usa o operador OR). O que eu realmente precisa é adicionar as duas pontuações em conjunto de modo que se uma palavra-chave aparece no título e no texto que vai ter uma pontuação maior do que se ele só aparece no título.

Então, como você adicionar as pontuações para colunas ponderada em um contém cláusula?

Foi útil?

Solução

Em vez do operador OR, uso ACCUM:

documento SELECT. *, Score (1) como Score DE documento ONDE CONTÉM (dummy '(((the_keyword) dentro DocumentTitle)) * 2 ACCUM ((the_keyword) dentro DocumentText)', 1)> 0) ORDER BY Pontuação desconto

Outras dicas

E se você fizer um SELECT aninhada?

select *, Score(1) + 2 * Score(2) as Score
from (
    SELECT document.*, Score(1) as Score
    FROM document
    WHERE CONTAINS(dummy, '(((the_keyword) within documentTitle))
        OR ((the_keyword) within documentText)',1) > 0)
)
ORDER BY Score Desc
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top