..:: MX Studio Fóruns ::..: Sistema de busca com Verity Collections - ..:: MX Studio Fóruns ::..

Jump to content

Publicidade




ATENÇÃO

Para evitar posts desnecessários e que não influam para o andamento e desenvolvimento do fórum, clique aqui e leia todas as regras.
Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Sistema de busca com Verity Collections

#1 User is offline   Fichado 

  • Group: Membros
  • Posts: 27
  • Joined: 15-August 06

Posted 17 November 2006 - 08:43 AM

Fala galera!!
Seguinte...

Criei um .cfm para criar a collection no servidor (cria_collection.cfm):

ColdFusion
<cfcollection action="create" collection="collection" path="var/www/qualidade">


Rodei esta página, e a collection foi criada normalmente...

Depois criei outra página com a query e com a index:

ColdFusion
<CFQUERY NAME="q_GetResults" DATASOURCE="NAME">
SELECT arquivos.arquivo, arquivos.grupo, arquivos.usuario,
arquivos.tipo, arquivos.sequencia, arquivos.sequencia_procedimento,
arquivos.status, arquivos.versao_atual, arquivos.titulo, arquivos.sumario,
arquivos.descricao, arquivos.palavras_chaves, arquivos.nome_arquivo,
arquivos.codigo_docushare, arquivos.data_inicial, arquivos.data_atualizacao,
arquivos.data_expiracao, arquivos.grupos_adicionais, arquivos.normas, arquivos.categorizacao
FROM arquivos
WHERE arquivos.status = 'publicado'
ORDER BY arquivos.arquivo DESC
</CFQUERY>


<CFLOCK TYPE="EXCLUSIVE" TIMEOUT="30">

<CFINDEX
action="update"
COLLECTION="collection"
KEY="arquivo"
TYPE="CUSTOM"
TITLE="titulo"
QUERY="q_GetResults"
BODY="arquivo, grupo, usuario, tipo , sequencia , sequencia_procedimento, status, versao_atual, titulo, sumario, descricao, palavras_chaves, nome_arquivo, codigo_docushare, data_inicial, data_atualizacao, data_expiracao, grupos_adicionais, normas, categorizacao" custom1="usuario" custom2="tipo" >
</CFLOCK>


Depois criei este componente (consulta_arquivos.cfc):

ColdFusion

<cfcomponent displayname="pesquisa arquivo">
<cffunction name="lista_arquivo" output="0" returntype="query">
<cfargument name="criteria" type="string" required="true"/>

<CFSEARCH
COLLECTION="collection"
NAME="GetResults"
CRITERIA="#LCase(criteria)#">


<cfreturn GetResults>
</cffunction>




</cfcomponent>


Por fim, criei a página que vai mostrar o resultado da consulta (teste_busca_arquivo.cfm):

ColdFusion
<cfinclude template="header.cfm">

<cfprocessingdirective pageEncoding="ISO-8859-1">
<cfif not isDefined ("b_Search")>
<table width="880" align="center">

<form method="post" action="teste_busca_arquivo.cfm" >
<tr align="center" valign="top">
<td align="right"><b>Critérios: </b></td>
<td align="left">
<cfif not isdefined ("form.criteria")>
<input name="criteria" type="Text" id="criteria" tabindex="1" size="50" maxlength="50">
<cfelse>
<cfoutput>
<input name="criteria" type="Text" id="criteria" tabindex="1" value="#form.criteria#" size="50" maxlength="50">
</cfoutput>
</cfif>

<input type="submit" name="b_Search" value=" << Buscar >>">
</td>
</tr>

</form>
</table>
<cfelse>

<!--- <cfparam name="form.criteria" default=""> --->




<cfinvoke
method="lista_arquivo"
component="consulta_arquivos"
returnVariable="q_GetResults"
>
<CFIF (not isDefined("session.criteria")) >
<cfinvokeargument name="criteria" value="#form.criteria#">
<cfelse>
<cfinvokeargument name="criteria" value="#session.criteria#">
</CFIF>
</cfinvoke>

<!--- <cfoutput>#form.criteria#</cfoutput>
<cfabort> --->

<table width="880" align="center">
<tr>
<td height="100">
<table width="100%" height="70" border="0" align="center" cellpadding="0" cellspacing="0" >
<tr>
<CFOUTPUT>
<td height="16" align="center" nowrap colspan="5">Total de #q_GetResults.RecordCount# registros encontrados.</td>
</CFOUTPUT>
</tr>
<tr>
<td height="200" align="center" valign="top">
<cfif #q_GetResults.recordcount# neq 0>
<!--- <cfparam name="attributes.maxrows" default="15" type="numeric">
<cfparam name="attributes.thispage" default="1" type="numeric">
<cfparam name="attributes.groupsof" default="10" type="numeric">


<table width="100%" >

<tr>
<th >ID</th>
<th >Título</th>
<th >Usuário que cadastrou</th>
<th >Tipo de arquivo</th>
</tr>

<cfoutput query="q_GetResults"><!--- maxrows="15" startrow="#startrow#" --->
<tr>
<td >#arquivo#</td>
<td ><a href="javascript:Visualizar(#key#)" >#Title#</a></td>
<td >#Custom1#</td>
<td >#Custom2#</td>
</tr>
</cfoutput>
</table><hr width="85%" style="color:#006699;">
<!--- </cf_paginacao_1> --->
</td>
</cfif>
</tr>
</table>
</td>
</tr>
</table>

</cfif>

<cfinclude template="footer.cfm">


.....

A questão é...
Qualquer parametro q eu digitar na busca, ele traz 0 (zero) no recordCount da query (q_GetResults).... nunca acha nada!! sad.gif

Oq devo fazer?...... ALguém pode me dar uma luz do que eu estou fazendo de errado? =\


Muito obrigado pela ateção!!
0

#2 User is offline   Dsouza 

  • Group: Colunistas
  • Posts: 138
  • Joined: 16-September 05

Posted 17 November 2006 - 07:38 PM

Cara sua query esta perfeita.

Vc esta usando SQL server ?

1º Pode ser algum dado incompatível com o banco
2º Verifica seu Application, ou o arquivo que cria a session.criteria, pode ser que ela esteja se perdendo no caminho.

3º verifica o path="var/www/qualidade"


vê se o caminho esta OK.

A Forma que vc usa para efetuar e busca é legal, não que fique mais lento , mas vc já tentou fazer um teste por um método mais direto?

Liga o Debug e vê quais as variáveis criadas.


Abraços
0

#3 User is offline   Fichado 

  • Group: Membros
  • Posts: 27
  • Joined: 15-August 06

Posted 21 November 2006 - 09:30 AM

Fala ae Dsouza, fmz velho?
Desculpe-me a demora para retornar...

Uso mySQL aqui, mas eu já descobri o que estava errado.
Eu não rodei a página com o CFindex no servidor, e ae se não havia dados indexados para a pesquisa, logicamente que a pesquisa não iria retornar um valor... ehhehe
+ agora aparentemente está tudo certo.

De qualquer forma foi bom eu ter postado, para que fique registrado caso alguém queira fazer um sistema de busca usando verity. =)

Valeu pela força véio!!

Abs
0

#4 User is offline   Fichado 

  • Group: Membros
  • Posts: 27
  • Joined: 15-August 06

Posted 21 November 2006 - 10:48 AM

Bom, agora vem outra dúvida.

O cliente quer que esta busca seja feita por palavras contidas dentro dos arquivos e existem vários tipos de arquivos (.doc; .txt; .ppt; .pdf, etc etc etc) no servidor.

É possível se fazer isso?

Obrigado pela atenção!!
0

#5 User is offline   pcsilva 

  • Group: Moderadores
  • Posts: 1940
  • Joined: 23-January 05

Posted 21 November 2006 - 11:53 AM

ColdFusion
<cfindex collection="nome_da_colecao" action="refresh" extensions=".doc; .txt; .ppt; .pdf" ....>

0

#6 User is offline   Fichado 

  • Group: Membros
  • Posts: 27
  • Joined: 15-August 06

Posted 21 November 2006 - 02:11 PM

Ahh blz!! =)

Mas como eu faço agora para retornar os dados na página "teste_busca_arquivo.cfm"?

Creio que deverei mudar o valor do "returnVariable" do cfinvoke, pois antes eu estava retornando os dados da query (q_GetResults) (como foi postado).
+ se for isso mesmo, que valor devo colocar?...
Pq eu terei de trazer o resultado, mas com os dados dos campo da tabela "arquivos" (arquivos.arquivo, arquivos.titulo, arquivos.usuario e arquivos.tipo)!!
Ishhh..... agora to confuso. blink.gif

Desde já, muito obrigado!!
0

#7 User is offline   Fichado 

  • Group: Membros
  • Posts: 27
  • Joined: 15-August 06

Posted 21 November 2006 - 02:57 PM

Na index_arquivos.cfm alterei o código assim:

ColdFusion
<CFQUERY NAME="q_GetResults" DATASOURCE="#application.DSN#">
SELECT arquivos.arquivo, arquivos.usuario, arquivos.tipo, arquivos.titulo
FROM arquivos
WHERE arquivos.status = 'publicado'
ORDER BY arquivos.arquivo DESC
</CFQUERY>


<CFLOCK TYPE="EXCLUSIVE" TIMEOUT="30">

<CFINDEX
action="refresh"
COLLECTION="collection_mogit"
Extensions=".doc; .txt; .ppt; .pdf"
KEY="arquivo"
TYPE="CUSTOM"
TITLE="arquivo"
QUERY="q_GetResults"
BODY="arquivo, usuario, tipo " custom1="usuario" custom2="tipo" >

</CFLOCK>


Mas não é assim, pois oq eu quero, é que ele busque pelo parametro digitado pelo usuário dentro dos arquivos no servidor, mas que ele mostre o resultado na tela no formato => #q_GetResults.arquivo#, #q_GetResults.usuario#, #q_GetResults.tipo#, #q_GetResults.titulo#".
Só que dessa maneira, ele não está pesquisando pela palavra digitada dentro dos arquivos no servidor, e sim buscando nestes campos da query (q_GetResults.arquivo, q_GetResults.usuario, q_GetResults.tipo, q_GetResults.titulo).

Oq devo fazer? huh.gif
0

#8 User is offline   pcsilva 

  • Group: Moderadores
  • Posts: 1940
  • Joined: 23-January 05

Posted 21 November 2006 - 03:08 PM

Esta ok, basta terminar o script, veja no final da descricao da tag tem um exemplo, olha ai.
http://livedocs.macromedia.com/coldfusion/...s90.htm#1103106
0

#9 User is offline   Fichado 

  • Group: Membros
  • Posts: 27
  • Joined: 15-August 06

Posted 22 November 2006 - 09:27 AM

Muito estranho, ele continua buscando nos campos da query, e não dentro dos .doc do servidor.

Olha só:

index_arquivos.cfm:
ColdFusion
<CFQUERY NAME="GetResults" DATASOURCE="#application.DSN#">
SELECT arquivos.arquivo, arquivos.usuario, arquivos.tipo, arquivos.titulo
FROM arquivos
WHERE arquivos.status = 'publicado'
ORDER BY arquivos.arquivo DESC
</CFQUERY>


<CFLOCK TYPE="EXCLUSIVE" TIMEOUT="30">
<CFINDEX
action="update"
COLLECTION="collection"
Extensions=".doc; .txt; .ppt; .pdf"
KEY="arquivo"
TYPE="PATH"
Urlpath="#url#"
TITLE="arquivo"
QUERY="GetResults"
recurse="Yes"
BODY="arquivo, usuario, tipo " custom1="usuario" custom2="tipo" >

</CFLOCK>


consulta_arquivos.cfc:
ColdFusion
<cfcomponent displayname="pesquisa arquivo">
<cffunction name="lista_arquivo" output="0" returntype="query">
<cfargument name="criteria" type="string" required="true"/>
<CFSEARCH
COLLECTION="collection"
NAME="GetResults"
CRITERIA="#LCase(criteria)#">


<cfreturn GetResults>
</cffunction>
</cfcomponent>


teste_busca_arquivo.cfm:
ColdFusion
<cfinclude template="header.cfm">

<cfprocessingdirective pageEncoding="ISO-8859-1">

<cfif not isDefined ("b_Search")>
<table width="100%" align="center">

<form method="post" action="teste_busca_arquivo.cfm" >
<tr align="center" valign="top">
<td align="right"><b>Critérios: </b></td>
<td align="left">
<cfif not isdefined ("form.criteria")>
<input name="criteria" type="Text" id="criteria" tabindex="1" size="50" maxlength="50">
<cfelse>
<cfoutput>
<input name="criteria" type="Text" id="criteria" tabindex="1" value="#form.criteria#" size="50" maxlength="50">
</cfoutput>
</cfif>

<input type="submit" name="b_Search" value=" << Buscar >>" onclick="Valida(this.form)">
</td>
</tr>

</form>
</table>

<cfelse>

<!--- <cfparam name="form.criteria" default=""> --->

<cfinvoke
method="lista_arquivo"
component="consulta_arquivos"
returnVariable="GetResults"
>
<CFIF (not isDefined("session.criteria")) >
<cfinvokeargument name="criteria" value="#form.criteria#">
<cfelse>
<cfinvokeargument name="criteria" value="#session.criteria#">
</CFIF>
</cfinvoke>

<!--- <cfoutput>
#form.criteria#<br><br>
R:#GetResults.RecordCount#<br><br>
URL:#GetResults.url#<br><br>
KEY:#GetResults.key#<br><br>
Titlt:#GetResults.title#<br><br>
score:#GetResults.score#<br><br>
custom1:#GetResults.custom1#<br><br>
custom2:#GetResults.custom2#<br><br>
summary:#GetResults.summary#<br><br>
<!---#GetResults.currentrow#<br><br>
#GetResults.columnlist#<br><br>
#GetResults.recordssearched#<br> --->
</cfoutput>
<cfabort> --->

<table width="100%" align="center">
<tr>
<td height="100">
<table width="100%" height="70" border="0" align="center" cellpadding="0" cellspacing="0" >
<tr>
<CFOUTPUT>
<td height="16" align="center" nowrap colspan="5">Total de #GetResults.RecordCount# registros encontrados.</td>
</CFOUTPUT>
</tr>
<tr>
<td height="200" align="center" valign="top">
<cfif #GetResults.recordcount# neq 0>
<!--- <cfparam name="attributes.maxrows" default="15" type="numeric">
<cfparam name="attributes.thispage" default="1" type="numeric">
<cfparam name="attributes.groupsof" default="10" type="numeric">
<cf_paginacao_1 q_name="#getresults#" maxrows="15" thispage="#attributes.thispage#" groupsof="#attributes.groupsof#" > --->
<table width="100%" >
<tr>
<th >ID</th>
<th >Título</th>
<th >Usuário que cadastrou</th>
<th >Tipo de arquivo</th>
</tr>
<cfoutput query="GetResults"><!--- maxrows="15" startrow="#startrow#" --->
<tr>
<td>#key#</td>
<td><a href="./ver_documento.cfm?arquivo=#key#" title="Ver Documento">#Title#</a></td>
<td>#Custom1#</td>
<td>#Custom2#</td>
</tr>
</cfoutput>
</table><!--- <hr width="85%" style="color:#006699;"> --->
</td>
</cfif>
</tr>
</table>
</td>
</tr>
</table>

</cfif>

<cfinclude template="footer.cfm">



Está tudo ok, não está?

Cara, vc está me ajudando muito, valeu mesmo!! smile.gif

0

#10 User is offline   pcsilva 

  • Group: Moderadores
  • Posts: 1940
  • Joined: 23-January 05

Posted 22 November 2006 - 11:36 AM

index_arquivos.cfm:
ColdFusion

<CFLOCK TYPE="EXCLUSIVE" TIMEOUT="30">
<CFINDEX
action="update"
COLLECTION="collection"
Extensions=".doc; .txt; .ppt; .pdf"
KEY="arquivo"
TYPE="PATH"
Urlpath="#url#"
TITLE="arquivo"
recurse="Yes">

</CFLOCK>


0

#11 User is offline   Fichado 

  • Group: Membros
  • Posts: 27
  • Joined: 15-August 06

Posted 22 November 2006 - 12:19 PM

Fala Pedrão!

Continuou do mesmo jeito. =\

Vc teria por ae, algum sisteminha de busca simples usando o CFindex e o CFsearch para eu dar uma olhada e fazer alguns testes por aqui?

Não sei mais o que fazer. Já me esgotaram as possibilidades! =\

Valeu!!
0

#12 User is offline   pcsilva 

  • Group: Moderadores
  • Posts: 1940
  • Joined: 23-January 05

Posted 22 November 2006 - 01:24 PM

ColdFusion
<cfset f = GetFileFromPath(GetTemplatePath()) >
<cfset p = Replace(CGI.PATH_TRANSLATED,"\#f#","","one") >
<cfset u = "http://#CGI.SERVER_NAME#:#CGI.SERVER_PORT##replace(listgetat(CGI.SCRIPT_NAME,1,'?'),'/#f#','','one')#" >
<cftry>
<cfcollection action="create" collection="mycollection" path="#p#">
<cfcatch type="coldfusion.tagext.search.Utils$CollectionExistsException"></cfcatch>
</cftry>
<cfindex action="update" collection="mycollection" key="#p#" type="path" title="Teste" URLpath="#u#" extensions=".cfc,.cfm" recurse="Yes">
<cfsearch name="query" collection="mycollection" type="simple" criteria="cfset">
<cfdump var="#query#">

0

#13 User is offline   Fichado 

  • Group: Membros
  • Posts: 27
  • Joined: 15-August 06

Posted 22 November 2006 - 02:22 PM

Orra, legal esse seu exemplo! =)

Agora vamos a luta para fazer os testes.

De cara já está dando erro para se criar a collection. Não sei pq, pois ontem eu estava tentando criar uma collection com um path la e não estava criando e dava o mesmo erro que está dando para criar com o seu exemplo.
Ae hj, a 1a coisa que fiz foi tentar criar a mesma collection com o mesmo path e ae criou normalmente...
Bom, ae já está envolvendo problema no servidor e talz...

Enfim, agradeço muito pela força Pedro.

Quando eu finalizar isso aqui, eu volto a postar dizendo qual é era o problema. =)
0

#14 User is offline   Fichado 

  • Group: Membros
  • Posts: 27
  • Joined: 15-August 06

Posted 23 November 2006 - 02:58 PM

Opa!

Fiz uns testes locais aqui, e realmente o problema está no caminho do servidor daqui do trampo, porque localmente está funcionando tudo perfeito.

Agora a questão é.
O que vcs me indicam com relação ao CFindex?... O que é mais viável, roda-lo de 1 em 1 hora, roda-lo de 12 em 12 horas, ou não faz diferença?

Digo isso pq vários documento são incluidos no sistema diariamente e precisaria q a index fosse rodada de tempos em tempos...
Roda-lo em intervalos de tempos curtos, pode dar algum problema?

Ah!, e em que local do CFAministrator eu configuro para se rodar um determinado arquivo de tempos em tempos?

Valeu!! smile.gif
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic



Publicidade




1 User(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)