Resultados da pesquisa devem priorizar a primeira postagem no tópico quando o título corresponder ao termo de pesquisa

Recentemente, notei que, ao pesquisar um tópico específico, os resultados da pesquisa me mostram uma postagem no meio do tópico em vez da primeira postagem. Isso ocorre quando uma postagem no tópico contém o mesmo termo de pesquisa que está incluído no título do tópico. Aqui estão dois exemplos recentes do http://community.wanikani.com:

Ao pesquisar por “Self Study Quiz” ou “Self-Study Quiz”, obtenho [Userscript] Self-Study Quiz - #731 by prouleau - API And Third-Party Apps - WaniKani Community em vez da primeira postagem.

Ao pesquisar por “ご注文はうさぎですか”, obtenho ご注文はうさぎですか miscellaneous discussion - #93 by seanblue - Book Clubs - WaniKani Community em vez da primeira postagem.

Classifiquei isso em #feature porque não tenho 100% de certeza de que isso já funcionou da maneira que estou descrevendo. No entanto, pesquiso o segundo termo acima várias vezes por ano e tenho bastante certeza de que os resultados da pesquisa costumavam retornar a primeira postagem do tópico. Se isso foi alterado sem intenção em algum momento, vocês podem considerar isso um bug.

Sei que há uma opção de pesquisa avançada para pesquisar apenas títulos de tópicos, mas isso parece desnecessário neste caso. Como o termo de pesquisa corresponde a muitas postagens no tópico, além do próprio título, acho que deveria priorizar automaticamente a correspondência no título e retornar a primeira postagem.

6 curtidas

Este é o resultado das alterações de @tgxworld e @sam na busca recentemente. Talvez eles possam responder.

4 curtidas

Sim, tivemos uma longa discussão sobre isso. No geral, minha preferência é que a busca seja muito simples e sempre priorize a primeira correspondência no tópico, independentemente da classificação. Isso torna muito mais fácil explicar às pessoas; a classificação parece muito arbitrária e mágica.

7 curtidas

Entendo a solicitação no tópico original para permitir que a pesquisa referencie o próprio tópico (ou seja, a primeira postagem) se o título do tópico corresponder aos critérios de pesquisa. Caso contrário, referencie a postagem concreta onde a correspondência ocorre.

3 curtidas

O problema é que podemos ter 15 correspondências em um tópico, sendo que uma delas possui a maior “classificação”.

4 curtidas

Franco, desde que a primeira postagem (via correspondência de título) seja priorizada acima de tudo, não me importo muito com o resto, mas o que você está dizendo me parece razoável. Quando uma dúzia de postagens no tópico correspondem à frase exata que você está procurando, aquela que realmente é retornada nos resultados da busca certamente parece arbitrária no momento. Retornar sempre a postagem correspondente mais antiga no tópico parece uma boa solução para mim.

Dito isso, o algoritmo de busca provavelmente ainda deve priorizar pelo menos as correspondências exatas, para garantir que uma postagem anterior que corresponde apenas parcialmente ao termo de busca não seja priorizada em relação a uma postagem posterior que corresponde exatamente. Não sei se isso é relevante, já que não estou muito familiarizado com o algoritmo. De qualquer forma, como disse antes, acho que todos esses detalhes são muito menos importantes do que priorizar a correspondência de título acima de tudo.

6 curtidas

Continuo recebendo menções de pessoas que linkam para um post meu no meio de um tópico, quando na verdade queriam compartilhar o próprio tópico. A abordagem atual certamente está causando confusão.

1 curtida

Sim, @tgxworld e @sam, isso realmente precisa ser alterado. Estamos muito além da regra de 3 aqui. A correspondência de título deve ter um peso massivo de supernova buraco negro no ranqueamento.

9 curtidas

Acho que as coisas não podem ser tão simples quanto priorizar sempre a primeira postagem de um tópico, pois alterar um cenário específico de busca afetará outro. Considere o seguinte cenário:

  1. O Tópico X e o Tópico Y contêm postagens que correspondem ao termo de busca “discourse”.
  2. A postagem número 1 e a postagem número 100 no Tópico X correspondem ao termo de busca “discourse”.
  3. A postagem número 100 tem classificação mais alta, pois seu conteúdo é uma correspondência muito melhor para o termo de busca “discourse”.
  4. A postagem número 1 do Tópico Y corresponde ao termo de busca “discourse”.
  5. A postagem número 1 do Tópico Y tem classificação mais alta do que a postagem número 1 do Tópico X, pois seu conteúdo é mais relevante para o termo de busca “discourse”.

Com a abordagem anterior, estávamos usando a classificação da postagem número 100 do Tópico X para comparar com a postagem número 1 do Tópico Y. Neste caso, a postagem número 1 do Tópico X aparece acima da postagem número 1 do Tópico Y nos resultados de busca, mesmo que a postagem número 1 do Tópico Y corresponda claramente melhor ao termo de busca do que a postagem número 1 do Tópico X. Isso é equivalente a classificar tópicos com base na maior classificação de uma postagem dentro do tópico.

Se simplesmente pegarmos a primeira postagem de um tópico que corresponde ao termo de busca, acabaremos excluindo postagens que são uma correspondência melhor, mas que têm um número de postagem mais alto em um tópico, o que levanta a questão de por que essa postagem não foi incluída nos resultados da busca.

Acho que minha principal objeção aqui ao que está sendo proposto é que a busca, por padrão, procura por postagens, então o corpo de uma postagem é realmente o que um usuário está procurando, e não o título. O título nos ajuda a filtrar todos os tópicos para encontrar as postagens certas para buscar.

Na verdade, damos um peso maior à correspondência de título. O único problema é que o título faz parte dos dados de busca para todas as postagens em um determinado tópico, então todas as postagens estão realmente se beneficiando do mesmo peso para correspondências de título.

2 curtidas

Acho que ninguém está sugerindo isso, porém. Estamos dizendo para ranquear correspondências de título mais alto, o que não é o cenário que você acabou de descrever. Quando o título corresponde ao termo de pesquisa, deve especificamente impulsionar o ranqueamento da primeira postagem, e não de todas as postagens no tópico.

Discordo dessa avaliação. Os usuários não se importam em encontrar postagens especificamente, mas sim em encontrar conteúdo. Quando os tópicos são nomeados adequadamente, o título é frequentemente o melhor indicador do que o usuário deseja, e na maioria das vezes isso significa começar pela primeira postagem.

Pelo menos na comunidade que utilizo, há tópicos em certas subcategorias que são frequentemente pesquisados com o propósito de compartilhá-los quando outros usuários pedem ajuda. Obter uma postagem aleatória do tópico nos resultados da pesquisa, em vez da primeira postagem, levou ao compartilhamento de postagens erradas, o que resultou em usuários não recebendo ajuda tão rapidamente quanto poderiam.

Seja para compartilhamento ou para uso pessoal, também acho que você está subestimando com que frequência os usuários simplesmente querem pesquisar o mesmo tópico repetidamente, e acho que nesses casos, na grande maioria das vezes, os usuários querem ou a primeira postagem ou continuar de onde pararam.

5 curtidas

O cenário que descrevi era como a busca no Discourse funcionava antes e é um comportamento incorreto.

Acho que essa foi uma maneira errada de formular isso; a busca, por padrão, procura por uma combinação do título do tópico e do corpo do post.

Embora isso possa ser verdade, nem sempre é o caso, pois isso pressupõe que o termo de busca sempre corresponderá ao título do tópico. Em fóruns de programação, às vezes estou procurando por um trecho de código, o que não é algo que aparecerá no título.

O que está sendo proposto não é impossível, embora haja algumas decisões técnicas e compensações que precisaremos tomar. Por exemplo, precisamos remover o título do tópico dos PostSearchData para posts que não são o primeiro post. Isso garante que as correspondências de título do tópico ranquem o primeiro post mais alto do que os outros posts no tópico, mas ainda significa que estamos à mercê do algoritmo de ranqueamento do Postgres.

4 curtidas

Aqui está outro exemplo para demonstrar meu caso de uso. Pesquisei por “kanji especial” em https://community.wanikani.com com o objetivo de encontrar este tópico: Special kanji words derived from other words - Kanji - WaniKani Community. Eu queria ver a tabela de dados na primeira postagem, que é um wiki. Como você pode ver, meu termo de pesquisa corresponde exatamente ao início do título do tópico. No entanto, a primeira postagem não contém realmente a palavra “especial”, então outra postagem foi priorizada em vez disso, apenas porque ambas as palavras “especial” e “kanji” estavam em algum lugar na postagem.

Espero que fornecer exemplos adicionais como este seja útil.

3 curtidas

@sam, gostaria de saber sua opinião sobre isso. A busca está classificando corretamente porque a “postagem em algum lugar” contém os termos de busca no título e no corpo, enquanto a primeira postagem contém os termos de busca apenas no título. Parece contra intuitivo que queiramos mostrar a primeira postagem quando outra postagem é uma correspondência muito melhor. Pelo que vejo, temos algumas opções a considerar:

  1. Reverter para o comportamento antigo. Quando várias postagens em um tópico correspondem a um termo de busca, sempre escolher a postagem com o menor número. A desvantagem aqui é que o menor número de postagem pode nem sempre ser a primeira postagem, e nosso resultado de busca pode acabar sendo ruim quando isso acontecer. Também há casos em que o corpo de uma postagem é obviamente uma correspondência muito melhor, mas acaba sendo excluído apenas porque outra postagem com um número menor no tópico também corresponde aos termos de busca.

  2. Será que podemos resolver o problema do lado da experiência do usuário (UX)? Em vez de ter apenas um único link que leva à postagem, talvez o título do resultado da busca sempre leve à primeira postagem do título, enquanto o trecho da busca leve à postagem que foi classificada no resultado da busca.

  3. Excluir informações do título do tópico dos PostSearchData de postagens que não são a primeira postagem. Precisaremos experimentar um pouco, mas espero que isso incline fortemente os resultados da busca para retornar as primeiras postagens.

Estou meio que inclinado a tentar a opção 2, pois mantém nossos resultados de busca precisos, ao mesmo tempo em que oferece aos usuários, que sabem o que estão procurando, uma maneira de ir à primeira postagem a partir dos resultados da busca.

4 curtidas

Parece realmente desagradável para mim. Isso não é óbvio, a menos que o usuário esteja acostumado a ler (e interpretar) os dados de links ao passar o mouse.


Talvez considerar uma pesquisa em duas etapas?

  • Pesquisar títulos de tópicos, correspondendo apenas a CORRESPONDÊNCIA_EXATA e CONTÉM_TODOS
    • Estes são colocados no topo dos resultados, com CORRESPONDÊNCIA_EXATA tendo prioridade
  • Em seguida, preencha o restante dos resultados usando a pesquisa ponderada atual, excluindo quaisquer posts iniciais de tópicos que foram capturados na primeira etapa.
3 curtidas

A ideia é que faremos alterações na UX para tornar isso óbvio.

A ideia é sólida, mas não acho que possamos executar a consulta de busca do PostgreSQL de forma eficiente, pois não há suporte a índices ao tentar corresponder com os operadores like e ilike. Outro fator a considerar é que não há como classificar correspondências exatas ou correspondências de conteúdo. Essa é a razão pela qual confiamos nas capacidades de busca de texto completo fornecidas pelo PostgreSQL.

1 curtida

Acho que você provavelmente precisaria de uma maneira mais óbvia de distinguir os links do primeiro post e dos posts correspondentes. Não acho que sua proposta seria intuitiva. (Mas entendo que era apenas um exemplo.)

Uma possibilidade que pensei é mostrar todos os posts correspondentes de um tópico, talvez usando algum mecanismo de expandir/recolher. Assim, você mostraria o post melhor correspondido de todos os tópicos correspondentes, de forma semelhante à visualização atual, mas haveria uma seta ou algo assim ao lado de cada tópico correspondente para expandir a lista e mostrar todos os posts correspondentes naquele tópico. Pode ser exagero, não sei.

Acho que isso vale a pena testar com certeza. Resolveria o problema de que tenho reclamado, priorizando as correspondências de título. Mas também resolveria o cenário que você mencionou sobre fóruns de programação @tgxworld, já que, como você disse, os trechos de código não estariam no título.

Claro, se for impraticável, imagino que seja outra história. Talvez alguém saiba de uma maneira de torná-lo performático o suficiente.

Confiar em tecnologia existente é ótimo, mas apenas quando ela resolve adequadamente seu caso de uso. Parece que a pesquisa de texto completo do PostgreSQL é insuficiente por si só, dadas as questões levantadas neste tópico. Parece que uma abordagem híbrida, como a proposta por @Sailsman63, seria ideal, se houver uma maneira de torná-la viável.

Como parece que não há uma “resposta fácil” no momento, sinceramente acho que essa é a melhor opção enquanto uma solução mais completa está sendo desenvolvida. Qualquer mudança na UX ou novo algoritmo que exija otimizações de banco de dados ou outras considerações de desempenho pode levar um tempo para ficar certo, então acho que reverter para o comportamento antigo seria razoável como uma solução temporária.

Infelizmente, não é tão simples quanto dizer que vamos mudar para algo melhor para nós. Temos que considerar compromissos tanto das perspectivas de negócios quanto técnicas antes de chegarmos à nossa própria decisão.

Estou hesitante em fazer isso porque não nos leva a uma solução melhor. Na verdade, sinto fortemente que o comportamento antigo está incorreto. Os casos descritos neste tópico baseiam-se em um único cenário onde parece intuitivo que o resultado da busca vincule apenas ao primeiro post, porque o usuário que está pesquisando sabe exatamente sobre qual tópico deseja buscar. Eu iria tão longe a ponto de argumentar que usuários que já sabem o título do tópico que estão procurando devem usar o filtro de busca avançada in:title. Na maioria dos casos de busca, o conteúdo do post importa muito, e uma correspondência parcial no título do tópico não deve significar que o primeiro post do tópico seja exibido.

1 curtida

Sim, acho que faz sentido.

Talvez isso fosse suficiente se a pesquisa avançada fosse mais simples. Pessoalmente, acho extremamente difícil usá-la porque há simplesmente muitas opções, o que dificulta encontrar a opção de que preciso. Talvez seja só comigo :man_shrugging:

Talvez fosse apropriado promover a caixa de seleção in:title para que esteja sempre visível. Ou melhor ainda, talvez um menu suspenso à esquerda da caixa de entrada com opções como Todos, Títulos e Posts faria sentido, permitindo que o usuário especifique o escopo da pesquisa. Esse tipo de filtro de pesquisa é bastante comum, eu acho, então seria (espero) intuitivo para os usuários usarem ou ignorarem conforme julgarem necessário. Como exemplo comparável, o IMDb permite pesquisar por Todos, Títulos, Atores, etc. (Não me lembro das opções exatas agora.) Seria necessário encontrar uma maneira de diferenciar Todos e Posts, já que basicamente são a mesma coisa no momento, mas talvez essa abordagem valha a pena considerar.

2 curtidas

Isso é o que deveríamos estar fazendo — não faz absolutamente nenhum sentido para mim que todos os posts no tópico tenham o título do tópico associado a eles?

2 curtidas

Precisarei esclarecer isso com @sam, pois é assim que nosso índice de busca sempre foi construído. Na verdade, o índice de busca de cada post inclui o título, o nome da categoria e também os nomes das tags, mesmo que o post não seja o primeiro.

1 curtida