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 ?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top