Peça um padrão de design
-
26-09-2019 - |
Pergunta
Estamos trabalhando em uma aplicação web com um modelo de pesquisa.
No servlet de pesquisa, ele captura os parâmetros de solicitação do cliente e, em seguida, cria uma consulta de pesquisa de hibernação para pesquisa.
Agora o problema é que os parâmetros do cliente são mutáveis!
Todos os parâmetros que aceitamos estão listados a seguir:
1) palavra-chave.
As palavras-chave usadas para pesquisa, uma solicitação de pesquisa pode ser processada mesmo que apenas este parâmetro seja passado.
Exemplo válido:
/search?keyword="test"
2) baixo esquerdoX, baixo esquerdo Y, canto superior direito X, canto superior direito Y.
Esses quatro parâmetros devem ocorrer ao mesmo tempo ou nunca. Uma vez que esses quatro parâmetros são usados para um TermRangeQuery no lucene.Se um deles ocorrer, os outros três também deverão ocorrer.
E esses quatro parâmetros podem ocorrer com a "palavra-chave" ao mesmo tempo.
Exemplo válido:
/search?lowleftX=10&lowleftY=10&upperrightX=40&upperrightY=30
/search?lowleftX=10&lowleftY=10&upperrightX=40&upperrightY=30&keyword="test"
3) categoria
Isto é usado para limitar o escopo da pesquisa (basta pesquisar dentro da categoria especial).
4) começar, limitar
Esses dois parâmetros são usados para paginação.
5) campos de retorno
Os returnFields que serão recuperados do índice (se estiver armazenado no índice) e retornados ao cliente.
Portanto, não tenho ideia de como construir a consulta usando a sintaxe de estimativa (if....else....if...).
Alguém pode me dizer como ?
Solução
Não tenho ideia do que você quer dizer com "sintaxe de estimativa", mas me parece que os pontos 1 a 3 são a consulta real do Lucene.Você teria que inspecionar os parâmetros e decidir, dependendo do nome e do número de parâmetros, que tipo de consulta você possui.Usando as diferentes subclasses de Query, em particular BooleanQuery, você constrói uma consulta Lucene apropriada e a utiliza para criar um Hibernate Search FullTextQuery.Nesta consulta de texto completo você especifica os parâmetros de início e limite.Se você estiver usando projeções para recuperar os valores dos campos diretamente do índice, você também definirá os nomes dos campos projetados na consulta de texto completo.Espero que isso ajude um pouco.