[RESOLVIDO] Lucene - QueryBuild adicionado clausula AND

2 respostas
D

Pessoal estou com um problema em uma consulta, quero colocar a clausula AND em um termo, porem não estou conseguindo e tentei procurar e sem sucesso.

Segue o exemplo e o retorno da query (estou usando o Luke para testar as condições em cima do meu indece e o resultado são diferentes)

builder.bool()
	.should(builder
			.bool()
			.should(builder.keyword()
					.onFields("campo01", "campo02", "campo03")
					.matching(query).createQuery())
			.should(builder.keyword().wildcard().onField("campo01")
					.matching("*" + query + "*").createQuery())
			.should(builder.keyword().wildcard().onField("campo02")
					.matching("*" + query + "*").createQuery())
			.should(builder.keyword().wildcard().onField("campo03")
					.matching("*" + query + "*").createQuery()).createQuery())
	.must(builder.keyword().onField("campo04").matching(0).createQuery())
	.createQuery();

Esse código gera a seguinte query lucene:

(((campo01:teste campo02:test campo03:teste) campo01:*teste* campo02*teste* campo03:*teste*) +campo04:0)

Porem essa query está retornando um resultado maior que o esperado. Realizando testes com o Luke percebi que o Must não era o ideal, precisando ser o AND no lugar.

(((campo01:teste campo02:test campo03:teste) campo01:*teste* campo02*teste* campo03:*teste*) AND campo04:0)

Com isso o resultado está correto, porem não consegui fazer com que o query build criar esse resultado.

Alguem pode ajudar ou caso tenha ficado alguma dúvida. O que eu quero mesmo é como colocar uma condição AND em um determinado campo.

2 Respostas

D

Alguem?? “up”

D

Para quem esta precisando ou vá precisar segue a solução:

query1 AND query2

deve ser:

Portanto ficando assim:

builder.bool() .must(builder .bool() .should(builder.keyword() .onFields("campo01", "campo02", "campo03") .matching(query).createQuery()) .should(builder.keyword().wildcard().onField("campo01") .matching("*" + query + "*").createQuery()) .should(builder.keyword().wildcard().onField("campo02") .matching("*" + query + "*").createQuery()) .should(builder.keyword().wildcard().onField("campo03") .matching("*" + query + "*").createQuery()).createQuery()) .must(builder.keyword().onField("campo04").matching(0).createQuery()) .createQuery();
OU

(+((campo01:teste campo02:test campo03:teste) campo01:*teste* campo02*teste* campo03:*teste*) +campo04:0)

Criado 5 de outubro de 2012
Ultima resposta 8 de out. de 2012
Respostas 2
Participantes 1