Plugin Searchable
19/05/2010 00:00
0
Olá pessoal.
Estou com este erro
Error 500: Executing action [search] of controller [ExemploSearchableController] caused exception: java.lang.RuntimeException: there are more terms than documents in field "descricao", but it's impossible to sort on tokenized fields
Servlet: grails
URI: /padrao01/grails/exemploSearchable/search.dispatch
Exception Message: there are more terms than documents in field "descricao", but it's impossible to sort on tokenized fields
Caused by: Executing action [search] of controller [ExemploSearchableController] caused exception: java.lang.RuntimeException: there are more terms than documents in field "descricao", but it's impossible to sort on tokenized fields
Class: ExemploSearchableController
At Line: [83]
Code Snippet:
82: if(params.query){
83: searchList = ExemploSearchable.search(queryConcatenada, params).results
84: totalRegistros = ExemploSearchable.countHits(queryConcatenada, params)

Estou usando o Grails 1.2.0, na versão 1.1 não dá este erro.

Alguem pode ajudar-me <!-- s:?: --><img src="{SMILIES_PATH}/icon_question.gif" alt=":?:" title="Question" /><!-- s:?: -->
Tags: Ferramentas/Plugins


0
Valdinei,

o que você está querendo fazer com esse campo &quot;descricao&quot;? qual o conteúdo dele? como você monta a queryConcatenada no seu código? qual o conteudo dela?
19/05/2010 00:00


0
Igor,
o erro acontece quando clico na coluna da tabela do campo &quot;descricao&quot; para fazer um sort por ela. Uso o seguinte comando:
<g:sortableColumn property=&quot;descricao&quot; title=&quot;${message(code: 'exemploSearchable.descricao.label', default: 'Descricao')}&quot; params=&quot;[query: params.query, operador: params.operador, exatidao: params.exatidao]&quot; />

quanto ao conteúdo são valores normais de um campo de descrição de um produto. Ex. De corda, Barra, etc..

quanto a queryConcatenada, este é o codigo:
def search = {

def searchList
def querySegmentada
def queryConcatenada
def queryInformada
def tamanhoQuery
def totalRegistros

if (params.query) {
queryInformada = params.query
querySegmentada = queryInformada.split(&quot;[ +]&quot;)
tamanhoQuery = 0
queryConcatenada = &quot;&quot;

if (params.operador == &quot;AND&quot;) {
params.checkedAnd = &quot;checked&quot;
params.checkedOr = &quot;&quot;
} else {
params.checkedAnd = &quot;&quot;
params.checkedOr = &quot;checked&quot;
params.operador == &quot;OR&quot;
}

if (params.exatidao == &quot;Sim&quot;) {
params.checkedExatidao = &quot;checked&quot;
} else {
params.checkedExatidao = &quot;&quot;
}

while (querySegmentada.length > tamanhoQuery) {
if (params.exatidao != &quot;Sim&quot;) {
querySegmentada[tamanhoQuery] += &quot;*&quot;
}
if (queryConcatenada == &quot;&quot;) {
queryConcatenada = querySegmentada[tamanhoQuery]
} else {
queryConcatenada = queryConcatenada + &quot; &quot; + params.operador + &quot; &quot; + querySegmentada[tamanhoQuery]
}
tamanhoQuery += 1
}
}
if(params.query){
searchList = ExemploSearchable.search(queryConcatenada, params).results
totalRegistros = ExemploSearchable.countHits(queryConcatenada, params)
} else {
searchList = ExemploSearchable.list( params )
totalRegistros = searchList.count()
}
params.max = Math.min(params.max ? params.int('max') : 10, 100)
render(view:'list', model:[exemploSearchableInstanceList:searchList, exemploSearchableInstanceTotal:totalRegistros ])
}

quanto ao conteúdo da queryConcatenada, por ser qualquer coisa informada no form abaixo, concatenando as palavras &quot;AND&quot; ou &quot;OR&quot; conforme o que foi digitado:
<g:form name=&quot;search&quot; action=&quot;search&quot;>
<div class=&quot;dialog&quot;>
<table>
<tr>
<td colspan=&quot;2&quot;><input type=&quot;text&quot; name=&quot;query&quot; size=&quot;35&quot; value=&quot;${params.query}&quot;/></td>
<td><input type=&quot;submit&quot; value=&quot;Procurar&quot; /></td>
<td></td>
</tr>
<tr>
<td><input type=&quot;radio&quot; name=&quot;operador&quot; value=&quot;AND&quot; ${params.checkedAnd}/>Todas as palavras</td>
<td><input type=&quot;radio&quot; name=&quot;operador&quot; value=&quot;OR&quot; ${params.checkedOr}/>Pelo menos uma palavra</td>
<td><input type=&quot;checkbox&quot; name=&quot;exatidao&quot; value=&quot;Sim&quot; ${params.checkedExatidao}/>Palavras exatas</td>
</tr>
</table>
</div>
</g:form>

O erro só acontece porque no campo &quot;descricao&quot; o conteudo possui mais de uma palavra, se em toda a tabela este campo possuir somente uma palavra o erro não acontece.
20/05/2010 00:00


0
Valdinei,

Acredito que a maneira que você está montando essa query é que pode ser modificada.
manda ai o conteúdo final dela quando você faz busca por duas palavras ou mais para que possamos melhorar isso.
20/05/2010 00:00


0
Igor,
Estou usando os dados pelo BootStrap
new ExemploSearchable(nome:&quot;Arroz&quot;, descricao:&quot;Parborizado&quot;, quantidade:10).save()
new ExemploSearchable(nome:&quot;Arroz&quot;, descricao:&quot;Agulhinha&quot;, quantidade:20).save()
new ExemploSearchable(nome:&quot;Feijão&quot;, descricao:&quot;Preto&quot;, quantidade:30).save()
new ExemploSearchable(nome:&quot;Feijão&quot;, descricao:&quot;Marrom&quot;, quantidade:40).save()
new ExemploSearchable(nome:&quot;Arroz&quot;, descricao:&quot;Selvagem&quot;, quantidade:10).save()
new ExemploSearchable(nome:&quot;Feijão&quot;, descricao:&quot;Carioquinha&quot;, quantidade:205).save()
new ExemploSearchable(nome:&quot;Feijão&quot;, descricao:&quot;Corda fina&quot;, quantidade:125).save()
new ExemploSearchable(nome:&quot;Feijão&quot;, descricao:&quot;Fradinho&quot;, quantidade:250).save()
new ExemploSearchable(nome:&quot;Feijão&quot;, descricao:&quot;Rajado&quot;, quantidade:21).save()
new ExemploSearchable(nome:&quot;Feijão&quot;, descricao:&quot;Vermelho&quot;, quantidade:31).save()
new ExemploSearchable(nome:&quot;Arroz&quot;, descricao:&quot;Arbório&quot;, quantidade:8).save()
new ExemploSearchable(nome:&quot;Feijão&quot;, descricao:&quot;Chines changai&quot;, quantidade:6).save()
new ExemploSearchable(nome:&quot;Feijão&quot;, descricao:&quot;Paraguai falsificado&quot;, quantidade:1000).save()
new ExemploSearchable(nome:&quot;Feijão&quot;, descricao:&quot;Cipó&quot;, quantidade:1).save()
new ExemploSearchable(nome:&quot;Feijão&quot;, descricao:&quot;Branco&quot;, quantidade:72).save()
new ExemploSearchable(nome:&quot;Feijão&quot;, descricao:&quot;Paulista&quot;, quantidade:21).save()
new ExemploSearchable(nome:&quot;Feijão de corda&quot;, descricao:&quot;Verde&quot;, quantidade:31).save()

e faço a pesquisa por ex. Arroz
o plugin faça a pesquisa corretamente e traz somente os registros que contém &quot;Arroz&quot;, como o campo &quot;nome&quot; possui somente uma palavra o sort pela coluna nome funciona:
<g:sortableColumn property=&quot;nome&quot; title=&quot;${message(code: 'exemploSearchable.nome.label', default: 'Nome')}&quot; params=&quot;[query: params.query, operador: params.operador, exatidao: params.exatidao]&quot; />
mas pelo campo &quot;descricao&quot; não
a montagem da query é assim
if (params.query) {
queryInformada = params.query
querySegmentada = queryInformada.split(&quot;[ +]&quot;)
tamanhoQuery = 0
queryConcatenada = &quot;&quot;

if (params.operador == &quot;AND&quot;) {
params.checkedAnd = &quot;checked&quot;
params.checkedOr = &quot;&quot;
} else {
params.checkedAnd = &quot;&quot;
params.checkedOr = &quot;checked&quot;
params.operador == &quot;OR&quot;
}

if (params.exatidao == &quot;Sim&quot;) {
params.checkedExatidao = &quot;checked&quot;
} else {
params.checkedExatidao = &quot;&quot;
}

while (querySegmentada.length > tamanhoQuery) {
if (params.exatidao != &quot;Sim&quot;) {
querySegmentada[tamanhoQuery] += &quot;*&quot;
}
if (queryConcatenada == &quot;&quot;) {
queryConcatenada = querySegmentada[tamanhoQuery]
} else {
queryConcatenada = queryConcatenada + &quot; &quot; + params.operador + &quot; &quot; + querySegmentada[tamanhoQuery]
}
tamanhoQuery += 1
}
}

onde params.query é o valor a ser pesquisado e a queryConcatenada é o valor a ser pesquisado com os operadores &quot;AND&quot; ou &quot;OR&quot; caso tenha mais de uma palavra
21/05/2010 00:00


0
Valdinei,

dá uma olhada nesse tópico do fórum do hibernate https&#58;//forum.hibernate.org/viewtopic.php?f=9&amp;t=987887&amp;start=0
é o mesmo problema que o cara tá tendo.
21/05/2010 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto