Referência de pesquisa de texto completo
As seções a seguir descrevem a sintaxe Full Text Search (FTS).
O texto de consulta Full Text Search (FTS) pode ser usado de forma independente ou pode ser incorporado no CMIS-SQL usando a função de predicado contains(). A especificação CMIS suporta um subconjunto de FTS. Não é possível utilizar todo o poder do FTS e, ao mesmo tempo, manter a portabilidade entre repositórios CMIS.
O FTS é exposto diretamente pela interface, que adiciona seu próprio modelo, e também é usado como campo padrão. O modelo padrão é:
%(cm:name cm:title cm:description ia:whatEvent ia:descriptionEvent lnk:title lnk:description TEXT)
Quando o FTS é incorporado ao CMIS-SQL, apenas os identificadores de propriedade no estilo CMIS-SQL (cmis:name) e os aliases, os aliases das colunas do CMIS-SQL e os campos especiais listados podem ser usado para identificar campos. A consulta SQL define tabelas e aliases de tabelas após as cláusulas from e join. Se a consulta SQL fizer referência a mais de uma tabela, a função contains() deverá especificar uma única tabela para usar como seu alias. Todas as propriedades na consulta FTS incorporada são adicionadas a esta tabela e todos os aliases de coluna usados na consulta FTS devem referir-se à mesma tabela. Para uma única tabela, o alias da tabela não é obrigatório como parte da função contains().
Quando o FTS é usado de forma independente, os campos também podem ser identificados usando os estilos prefix:local-name e {uri}local-name.
Aumento (boost) do tempo de consulta
Os aumentos no tempo de consulta permitem que correspondências em determinadas partes da consulta influenciem a pontuação mais do que outras.
Todos os elementos da consulta podem ser impulsionados: termos, frases, termos exatos, termos expandidos, proximidade (somente em grupos arquivados), intervalos e grupos.
termo^2.4
"frase"^3
termo~0.8^4
=termo^3
~termo^4
cm:name:(grande \* amarelo)^4
1\..2^2
[1 TO 2]^2
amarelo AND (carro OR ônibus)^3
Os exemplos acima de pesquisas no Workspace utilizam diferentes sintaxes da linguagem de consulta Lucene (motor de pesquisa subjacente do repositório), que inclui os chamados "query time boosts". Estes boosts permitem ajustar a relevância de determinados termos ou combinações de termos nos resultados da pesquisa, atribuindo um peso maior a alguns elementos em relação a outros. Aqui está o significado de cada exemplo:
termo^2.4
:- A palavra "termo" tem um fator de boost de 2.4, o que significa que ele receberá maior peso na relevância dos resultados comparado a outros termos que não têm boost. Quanto maior o número, mais relevante o termo será para o sistema.
"frase"^3
:- O boost é aplicado para a palavra exata "frase", com um fator de 3. Ou seja, resultados que contêm essa palavra exata serão considerados mais relevantes.
termo~0.8^4
:- A palavra "termo" está sendo usada com uma busca fuzzy (
~0.8
indica a tolerância para correspondências aproximadas, ou seja, pequenas variações ortográficas ou de caracteres). ^4
indica que resultados que contenham correspondências fuzzy para "termo" terão maior relevância, com boost de 4.
- A palavra "termo" está sendo usada com uma busca fuzzy (
=termo^3
:- O operador
=
é usado para realizar uma pesquisa exata por "termo". ^3
significa que o resultado da pesquisa exata terá um boost de relevância 3.
- O operador
~termo^4
:- O operador
~
está aplicando uma busca fuzzy para a palavra "termo" com o boost de relevância 4. Ele procura variações próximas de "termo", como pequenas diferenças ortográficas.
- O operador
cm:name:(grande * amarelo)^4
:- Aqui, o campo de metadados
cm:name
está sendo pesquisado com a expressão "grande amarelo", onde o `` atua como um curinga para qualquer palavra entre "grande" e "amarelo". - O boost de 4 é aplicado para dar mais relevância aos nomes de arquivos ou documentos que correspondem a essa expressão.
- Aqui, o campo de metadados
1..2^2
:- Isso seria uma pesquisa num intervalo numérico (
1..2
) para números entre 1 e 2. - O boost de 2 indica que correspondências dentro deste intervalo teriam maior relevância.
- Isso seria uma pesquisa num intervalo numérico (
[1 TO 2]^2
:- Esta é uma outra forma de busca por intervalo numérico entre 1 e 2 (incluindo ambos).
- O boost de 2 é aplicado para aumentar a relevância de resultados que caem dentro deste intervalo.
amarelo AND (carro OR ônibus)^3
:- Isso representa uma expressão booleana: "amarelo" precisa aparecer, e ao menos um de "carro" ou "ônibus" também.
- O boost de 3 é aplicado à relevância dos resultados que atendem a essa combinação lógica.
Resumo
Os boosts (^n
) aumentam a relevância de um termo ou expressão na pesquisa, onde o número n
determina a importância relativa que aquele termo ou expressão terá nos resultados. Quanto maior o valor do boost, maior a probabilidade de o termo influenciar os resultados finais da pesquisa.
Esses elementos permitem que você controle melhor quais resultados têm mais peso nas consultas, ajustando as respostas do repositório conforme as prioridades dos termos pesquisados.
Pesquise usando matemática de data
Os tipos de campo de data no Solr suportam expressões matemáticas de data.
A expressão matemática de data facilita a criação de tempos relativos a momentos fixos no tempo e inclui a hora atual que pode ser representada usando o valor especial de NOW.
Sintaxe matemática de data
As expressões matemáticas de data consistem em adicionar alguma quantidade de tempo em uma unidade especificada ou em arredondar a hora atual para uma unidade especificada. As expressões podem ser encadeadas e são avaliadas da esquerda para a direita.
Por exemplo, para representar um momento daqui a dois meses, use:
NOW+2MONTHS
Para representar um ponto no tempo há um dia, use:
NOW-1DAY
Uma barra é usada para indicar arredondamento. Para representar o início da hora atual, use:
NOW/HOUR
Para representar um ponto no tempo seis meses e três dias no futuro e arredondar esse tempo para o início daquele dia, use:
NOW+6MONTHS+3DAYS/DAY
Embora a matemática de datas seja mais comumente usada em relação a NOW, ela também pode ser aplicada a qualquer momento fixo:
1972-05-20T17:33:18.772Z+6MONTHS+3DAYS/DAY
Observação: O Solr 6 possui suporte para a data matemática TODAY.
No contexto do repositório, que utiliza a sintaxe de Lucene para pesquisas, as expressões de datas que mencionadas permitem criar consultas dinâmicas e precisas baseadas em datas e intervalos de tempo. Aqui está a explicação de cada uma:
NOW+2MONTHS
:- Retorna a data atual somada a 2 meses. Esta expressão permite procurar por documentos ou itens cuja data seja no futuro, exatamente 2 meses a partir de agora.
NOW-1DAY
:- Retorna a data atual menos 1 dia. Ou seja, documentos ou itens cuja data seja exatamente 1 dia anterior à data e hora atuais.
NOW/HOUR
:- Retorna a hora atual truncada. Isso significa que os minutos e segundos são removidos, resultando em uma data e hora com o valor da hora atual, mas com minutos e segundos zerados. Por exemplo, se a data e hora atuais forem
2020-10-24T17:33:18.772Z
, a expressão retornaria2020-10-24T17:00:00.000Z
.
- Retorna a hora atual truncada. Isso significa que os minutos e segundos são removidos, resultando em uma data e hora com o valor da hora atual, mas com minutos e segundos zerados. Por exemplo, se a data e hora atuais forem
NOW+6MONTHS+3DAYS/DAY
:- Esta expressão combina operações de soma de tempo e truncamento. Primeiro, a data atual é somada a 6 meses e 3 dias, depois é truncada ao início do dia. O truncamento faz com que a hora, minuto e segundo sejam zerados, retornando a data exata no início daquele dia. Por exemplo,
2020-10-24T00:00:00.000Z
se o cálculo do tempo resultasse em 24 de outubro de 2024.
- Esta expressão combina operações de soma de tempo e truncamento. Primeiro, a data atual é somada a 6 meses e 3 dias, depois é truncada ao início do dia. O truncamento faz com que a hora, minuto e segundo sejam zerados, retornando a data exata no início daquele dia. Por exemplo,
1972-05-20T17:33:18.772Z+6MONTHS+3DAYS/DAY
:- Esta expressão pega a data exata 20 de maio de 1972 às 17:33:18 UTC e soma 6 meses e 3 dias, depois a trunca ao início do dia. O resultado será uma data e hora que corresponde ao início do dia resultante (0 horas, 0 minutos, 0 segundos), após o cálculo de 6 meses e 3 dias a partir de 20 de maio de 1972.
TODAY
:- Esta expressão representa a data atual, truncada ao início do dia. Ela retorna a data de hoje com a hora, minuto e segundo zerados, o que seria equivalente a
NOW/DAY
. Se a consulta for feita em 24 de outubro de 2020, ela retornaria2020-10-24T00:00:00.000Z
.
- Esta expressão representa a data atual, truncada ao início do dia. Ela retorna a data de hoje com a hora, minuto e segundo zerados, o que seria equivalente a
Resumo
Essas expressões são muito úteis para realizar consultas de documentos com base em intervalos de tempo relativos ao momento atual, permitindo flexibilidade e precisão na pesquisa. O uso de NOW
, somado ou subtraído de unidades de tempo como dias, meses, e truncamentos, ajuda a definir períodos específicos com base na data e hora atual.
Exemplo de Aplicação
Se considerarmos que o campo pc:DataDocumento
é uma propriedade personalizada de um tipo de documento no repositório, você pode aplicar as expressões de data para realizar buscas precisas baseadas nesse campo. Aqui estão alguns exemplos práticos de como usar essas expressões para encontrar arquivos com base em diferentes critérios de datas:
1. Encontrar documentos criados nos últimos 30 dias:
- Expressão:
pc:DataDocumento:[NOW-30DAYS TO NOW]
- Descrição: Busca documentos cuja data de criação (
pc:DataDocumento
) esteja entre 30 dias atrás e o momento atual.
2. Encontrar documentos com data de criação no futuro (próximos 2 meses):
- Expressão:
pc:DataDocumento:[NOW TO NOW+2MONTHS]
- Descrição: Retorna documentos cuja data de criação esteja dentro dos próximos 2 meses, a partir de hoje.
3. Encontrar documentos criados hoje:
- Expressão:
pc:DataDocumento:[TODAY TO NOW]
- Descrição: Busca documentos criados hoje, considerando qualquer momento do dia até o exato momento da consulta.
4. Encontrar documentos criados ontem:
- Expressão:
pc:DataDocumento:[NOW-1DAY/DAY TO TODAY]
- Descrição: Retorna documentos cuja data de criação foi durante o dia de ontem.
5. Encontrar documentos criados no último ano:
- Expressão:
pc:DataDocumento:[NOW-1YEAR TO NOW]
- Descrição: Busca documentos criados no último ano, a partir de um ano atrás até agora.
6. Encontrar documentos criados em um intervalo específico de tempo:
- Expressão:
pc:DataDocumento:[2023-01-01T00:00:00.000Z TO 2023-12-31T23:59:59.999Z]
- Descrição: Retorna documentos criados entre 1º de janeiro de 2023 e 31 de dezembro de 2023.
7. Encontrar documentos criados nos últimos 6 meses e 3 dias, truncados ao início do dia:
- Expressão:
pc:DataDocumento:[NOW-6MONTHS-3DAYS/DAY TO NOW]
- Descrição: Retorna documentos criados nos últimos 6 meses e 3 dias, mas a data é truncada ao início de cada dia.
8. Encontrar documentos criados em uma data específica (por exemplo, 20 de maio de 1972):
- Expressão:
pc:DataDocumento:"1972-05-20T00:00:00.000Z"
- Descrição: Busca documentos cuja data de criação seja exatamente 20 de maio de 1972.
9. Encontrar documentos criados nos próximos 6 meses e 3 dias, truncados ao início do dia:
- Expressão:
pc:DataDocumento:[NOW TO NOW+6MONTHS+3DAYS/DAY]
- Descrição: Retorna documentos cuja data de criação esteja dentro dos próximos 6 meses e 3 dias, com a data truncada ao início de cada dia.
10. Encontrar documentos criados entre ontem e hoje:
- Expressão:
pc:DataDocumento:[NOW-1DAY/DAY TO NOW]
- Descrição: Retorna documentos criados desde o início de ontem até o momento atual.
Procure por disjunções
Termos únicos, frases e assim por diante podem ser combinados usando OR em letras maiúsculas, minúsculas ou mistas.
O operador OR é interpretado como “pelo menos um é necessário, mais de um ou todos podem ser retornados”.
Se não for especificado de outra forma, por padrão os fragmentos de pesquisa serão unidos com OR.
grande amarelo banana
grande OR amarelo OR banana
TEXT:grande TEXT:amarelo TEXT:banana
TEXT:grande OR TEXT:amarelo OR TEXT:banana
Essas consultas procuram nós que contenham pelo menos um dos termos grande, amarelo ou banana em qualquer conteúdo.
Termos escapados
Qualquer caractere pode ser escapado usando aspas dupla “” em termos, IDs (identificadores de campo) e frases. Sequências de escape Unicode Java são suportadas. Os espaços em branco podem ser escapados em termos e IDs.
Por exemplo:
cm:my content:"my name"
Pesquise um termo exato
Para pesquisar um termo exato você deve prefixá-lo com “=”. A sintaxe suportada:
=termo
=termo1 =termo2
=“frase multi termo”
Observação: =“frase multi termo” retorna documentos apenas com a frase e os termos exatos na ordem exata.
=field:termo
=field:termo1 =field:termo2
=field:“frase multi termo”
Se você não especificar um campo, a pesquisa será executada em nome, descrição, título e conteúdo. Se o campo especificado for TOKENIZED=false na criação do campo no modelo de dados, apenas o campo completo será correspondido. Se o campo especificado for TOKENIZED=TRUE ou TOKENIZED=BOTH, a pesquisa será executada na versão tokenizada de localidade cruzada do campo.
Observação: Se a localidade cruzada não estiver configurada para o campo, ocorrerá uma exceção.
A lista de campos padrão suportados (também conhecidos como propriedades do repositório) é declarada no arquivo <search_services_home>/solrhome/conf/shared.properties.
alfresco.cross.locale.property.0={http://www.alfresco.org/model/content/1.0}name
alfresco.cross.locale.property.1={http://www.alfresco.org/model/content/1.0}lockOwner
Você pode estender esse recurso para alguns tipos de dados conhecidos, no mesmo local de arquivo, descomentando as linhas abaixo e executando uma reindexação completa para ativar a localização cruzada em todas as propriedades definidas com esses tipos:
alfresco.cross.locale.datatype.0={http://www.alfresco.org/model/dictionary/1.0}text
alfresco.cross.locale.datatype.1={http://www.alfresco.org/model/dictionary/1.0}content
alfresco.cross.locale.datatype.2={http://www.alfresco.org/model/dictionary/1.0}mltext
Pesquisar em campos
Pesquise campos específicos em vez do padrão. Termos, frases, etc. podem ser precedidos por um campo. Caso contrário, o campo padrão TEXT será usado.
field:term
field:"phrase"
=field:exact
~field:expand
Os campos se enquadram em três tipos: campos de propriedade, campos especiais e campos para tipos de dados.
Os campos de propriedade avaliam o termo de pesquisa em relação a uma propriedade específica, os campos especiais são descritos na tabela a seguir e os campos de tipo de dados avaliam o termo de pesquisa em relação a todas as propriedades do tipo determinado.
Tipo | Descrição |
---|---|
Propriedade | Imóvel totalmente qualificado, por exemplo{http://www.alfresco.org/model/content/1.0}name:apple |
Propriedade | Imóvel totalmente qualificado, por exemplo@{http://www.alfresco.org/model/content/1.0}name:apple |
Propriedade | Propriedade de estilo CMIS, por exemplo cm\_name:apple. |
Propriedade | Propriedade de estilo de prefixo, por exemplo cm:name:apple. |
Propriedade | Propriedade de estilo de prefixo, por exemplo @cm:name:apple. |
Propriedade | TEXTO, por exemplo TEXT:apple. |
Especial | ID, por exemplo ID:"NodeRef" |
Especial | ISROOT, por exemplo ISROOT:T |
Especial | Texas, por exemplo TX:"TX" |
Especial | PAIS, por exemplo PARENT:"NodeRef" |
Especial | PRIMARYPARENT, por exemplo PRIMARYPARENT:"NodeRef" |
Especial | QNAME, por exemplo QNAME:"app:company\_home" |
Especial | CLASSE, por exemplo CLASS:"qname" |
Especial | EXACTCLASS, por exemplo EXACTCLASS:"qname" |
Especial | TIPO, por exemplo TYPE:"qname". |
Especial | EXACTTYPE, por exemplo EXACTTYPE:"qname" |
Especial | ASPECT por exemplo ASPECT:"qname" |
Especial | EXACTASPECT, por exemplo EXACTASPECT:"qname" |
Especial | ISUNSET por exemplo ISUNSET:"property-qname" |
Especial | ISNULL, por exemplo ISNULL:"property-qname" |
Especial | ISNOTNULL, por exemplo ISNOTNULL:"property-qname" |
Especial | EXISTE, por exemplo EXISTS:"name of the property" |
Especial | SITE, por exemplo SITE:"shortname of the site" |
Especial | TAG. TAG: “nome da tag” Observação: TAG deve estar em letras maiúsculas. |
Tipo de dados totalmente qualificado | Tipo de dados, http://www.alfresco.org/model/dictionary/1.0}content:apple |
tipo de dados prefixado | Tipo de dados, d:content:apple |
Pesquisar em campos com vários valores
Quando você pesquisa em campos de vários valores, há opções adicionais disponíveis além de Pesquisar em campos↓. Para pesquisar em campos de vários valores, suas propriedades devem ter Multiple
valores ativados. Para mais informações, consulte Criar uma propriedade →.
Os exemplos de consultas a seguir são executados usando uma propriedade de vários valores de amostra "mul:os" que armazena valores "MacOS" e "Linux".
mul:os:"MacOS"
Retorna o documento porque "MacOS" é um dos valores da propriedade.
mul:os:("MacOS" AND "Windows")
Não retorna um documento porque a propriedade não contém o valor "Windows".
mul:os:("MacOS" OR "Windows")
Retorna o documento porque "MacOS"
é um dos valores da propriedade, embora "Windows" não seja.
Comportamento misto do ID FTS
Isso está relacionado à prioridade definida nas propriedades do dicionário de dados, que pode ser tokenizada ou não.
A prioridade explícita é definida prefixando a consulta com “=” para correspondências de padrões de identificadores.
O til (~
) pode ser usado para forçar a tokenização.
Pesquisar correspondência difusa
O repositório oferece suporte a pesquisas difusas com base na distância Levenshtein padrão do Lucene.
Para fazer uma pesquisa difusa, use o símbolo til (~
) no final de um termo de palavra única com um parâmetro entre 0 e 1 para especificar a similaridade necessária. Use um valor mais próximo de 1 para maior similaridade.
Por exemplo, para pesquisar um termo com grafia semelhante a fornecedor
use a pesquisa difusa:
fornecedor~0.9
Esta pesquisa encontrará termos como fornece, fornecedo e forno.
Pesquisar agrupamento
Use parênteses para encapsular instruções OR
para que o mecanismo de pesquisa as execute corretamente.
O operador OR
é executado como “Eu gostaria de encontrar pelo menos um destes termos”.
Os agrupamentos de termos são feitos usando ( and
). Agrupamentos de todos os elementos de consulta são suportados em geral. Agrupamentos também são suportados após um campo - grupo de campos.
Todos os elementos de consulta em grupos de campos se aplicam ao mesmo campo e não podem incluir um campo.
(big OR large) AND banana
title:((big OR large) AND banana)
Literais de consulta de pesquisa
Quando você pesquisa, as entradas geralmente são um termo ou frase. A representação de string digitada será transformada no tipo apropriado para cada propriedade ao executar a consulta. Por conveniência, existem literais numéricos, mas literais de string também podem ser usados.
Formatação de data
Você pode especificar uma data específica ou um literal de data. Um literal de data é uma expressão fixa que representa um intervalo relativo de tempo, por exemplo, no mês passado, nesta semana ou no próximo ano.
dateTime os valores dos campos são armazenados como Tempo Universal Coordenado (UTC). Os campos de data representam um ponto no tempo com precisão de milissegundos. Para formatação de campos de data, o Solr usa DateTimeFormatter.ISO_INSTANT →. O formatador instantâneo ISO formata um instante no Tempo Universal Coordenado (UTC), por exemplo:
YYYY-MM-DDThh:mm:ssZ
onde,
- YYYY é o ano.
- MMé o mês.
- DDé o dia do mês.
- hhé a hora do dia como em um relógio de 24 horas.
- mmsão minutos.
- sssão segundos.
- Z é um caractere literal Z que indica que esta representação de string da data está em UTC.
Observação: Nenhum fuso horário pode ser especificado. A representação em string de datas é sempre expressa em UTC, por exemplo:
1972-05-20T17:33:18Z
Literais de string[](#string-literals)Strings literais para frases podem ser colocados entre aspas duplas ou simples. O caractere único Java e o escape baseado em uXXXX são suportados nesses literais.
Literais inteiros e decimais estão em conformidade com as definições Java.
As datas, como qualquer outro literal, podem ser expressas como um termo ou frase. As datas estão no formato ...... Todo ou qualquer horário pode ser truncado.
Em consultas de intervalo, strings, termos e frases que não são analisados para uma instância de tipo válida para a propriedade são tratados como abertos.
test:integer[ 0 TO MAX] matches anything positive
Procure por negação[](#search-for-negation)Você pode restringir os resultados da pesquisa excluindo palavras com a sintaxe NOT.
Termos únicos, frases e assim por diante podem ser combinados usando “NOT” em letras maiúsculas, minúsculas ou mistas, ou prefixados com “! ” ou “-”.
Essas consultas procuram nós que contenham os termos yellow em qualquer conteúdo.
yellow NOT banana
yellow !banana
yellow -banana
NOT yellow banana
-yellow banana
!yellow banana
O operador NOT só pode ser usado para palavras-chave de string; não funciona com números ou datas.
Prefixar qualquer qualificador de pesquisa com - exclui todos os resultados que correspondam a esse qualificador.
Pesquise elementos opcionais, obrigatórios e excluídos de uma consulta[](#search-for-optional-mandatory-and-excluded-elements-of-a-query)Às vezes, AND e OR não são suficientes. Se você deseja encontrar documentos que devem conter o termo “carro”, marque mais aqueles com o termo “vermelho”, mas não corresponda àqueles que contêm apenas “vermelho”.
Operador | Descrição |
---|---|
”,” | O campo, frase, grupo é opcional; uma partida aumenta a pontuação. |
”+” | O campo, frase, grupo é obrigatório (Observação: difere do Google - veja “=”) |
”-“, “!” | O campo, frase e grupo não devem corresponder. |
O exemplo a seguir encontra documentos que contêm o termo “carro”, pontua mais alto aqueles com o termo “vermelho”, mas não corresponde àqueles que contêm apenas “vermelho”:
+car |red
Observação: Pelo menos um elemento de uma consulta deve corresponder (ou não) para que haja resultados.
Todas as construções AND e OR podem ser expressas com esses operadores.
Procure uma frase[](#search-for-a-phrase)As frases são colocadas entre aspas duplas. Quaisquer aspas incorporadas podem ser escapadas usando ``. Se nenhum campo for especificado, o campo TEXT padrão será usado, como acontece com pesquisas por um único termo.
A frase inteira será tokenizada antes da pesquisa de acordo com as definições apropriadas do dicionário de dados.
"big yellow banana"
Pesquisar precedência de operador[](#search-for-operator-precedence)A precedência do operador é semelhante a SQL (não semelhante a Java). Quando há mais de um operador lógico em uma instrução e eles não são agrupados explicitamente usando parênteses, NOT é avaliado primeiro, depois AND e, finalmente, OR.
O seguinte mostra a precedência do operador do maior para o menor:
"
[, ], <, >
()
~ (prefix and postfix), =
^
+, |, -
NOT,
AND
OR
AND e OR podem ser combinados com +, |, - com o seguintes significados:
AND (nenhum prefixo é igual a +) | Descrição |
---|---|
big AND dog | grande e cachorro devem ocorrer |
+big AND +dog | grande e cachorro devem ocorrer |
big AND +dog | grande e cachorro devem ocorrer |
+big AND dog | grande e cachorro devem ocorrer |
big AND |dog | grande deve ocorrer e cachorro deve ocorrer |
|big AND dog | grande deve ocorrer e cachorro deve ocorrer |
|big AND |dog | tanto grande quanto cachorro devem ocorrer, e pelo menos um deve corresponder |
big AND -dog | grande deve ocorrer e cachorro não deve ocorrer |
-big AND dog | grande não deve ocorrer e cachorro deve ocorrer |
-big AND -dog | tanto grande quanto cachorro não devem ocorrer |
|big AND -dog | grande deve ocorrer e cachorro não deve ocorrer |
OU (nenhum prefixo é igual a +) | Descrição |
---|---|
dog OR wolf | cão e lobo devem ocorrer, e pelo menos um deve corresponder |
+dog OR +wolf | cão e lobo devem ocorrer, e pelo menos um deve corresponder |
dog OR +wolf | cão e lobo devem ocorrer, e pelo menos um deve corresponder |
+dog OR wolf | cão e lobo devem ocorrer, e pelo menos um deve corresponder |
dog OR |wolf | cão e lobo devem ocorrer, e pelo menos um deve corresponder |
|dog OR wolf | cão e lobo devem ocorrer, e pelo menos um deve corresponder |
|dog OR |wolf | cão e lobo devem ocorrer, e pelo menos um deve corresponder |
dog OR -wolf | cão deveria ocorrer e lobo não deveria ocorrer, uma das cláusulas deve ser válida para qualquer resultado |
-dog OR wolf | cão não deveria ocorrer e lobo deveria ocorrer, uma das cláusulas deve ser válida para qualquer resultado |
-dog OR -wolf | cão e lobo não devem ocorrer, uma das cláusulas deve ser válida para qualquer resultado |
Estes exemplos mostram como incorporar consultas no CMIS.
Incorporado no CMIS contém()[](#embedded-in-cmis-contains)- strict queries
SELECT * FROM Document WHERE CONTAINS("quick")
- Alfresco extensions
SELECT * FROM Document D WHERE CONTAINS(D, 'cmis:name:\'Tutorial\'')
SELECT cmis:name as BOO FROM Document D WHERE CONTAINS('BOO:\'Tutorial\'')
Serviço de pesquisa[](#search-service)ResultSet results = searchService.query(storeRef, SearchService.LANGUAGE_FTS_ALFRESCO, "quick");
SearchService.LANGUAGE_FTS_ALFRESCO = "fts-alfresco"
Navegador de nó[](#node-browser)O FTS é compatível com o navegador do nó.
JavaScript[](#javascript)search
{
query: string, mandatory, in appropriate format and encoded for the given language
store: string, optional, defaults to 'workspace://SpacesStore'
language: string, optional, one of: lucene, xpath, jcr-xpath, fts-alfresco - defaults to 'lucene'
templates: [], optional, Array of query language template objects (see below) - if supported by the language
sort: [], optional, Array of sort column objects (see below) - if supported by the language
page: object, optional, paging information object (see below) - if supported by the language
namespace: string, optional, the default namespace for properties
defaultField: string, optional, the default field for query elements when not explicit in the query
onerror: string optional, result on error - one of: exception, no-results - defaults to 'exception'
}
sort
{
column: string, mandatory, sort column in appropriate format for the language
ascending: boolean optional, defaults to false
}
page
{
maxItems: int, optional, max number of items to return in result set
skipCount: int optional, number of items to skip over before returning results
}
template
{
field: string, mandatory, custom field name for the template
template: string mandatory, query template replacement for the template
}
Por exemplo:
var def =
{
query: "cm:name:test*",
language: "fts-alfresco"
};
var results = search.query(def);
FTS não é compatível com FreeMarker.
Procure por proximidade[](#search-for-proximity)A proximidade ao estilo do Google é suportada.
Para especificar a proximidade dos campos, use agrupamento.
big * apple
TEXT:(big * apple)
big *(3) apple
TEXT:(big *(3) apple)
Modelos de consulta de pesquisa[](#search-query-templates)A linguagem de consulta FTS oferece suporte a modelos de consulta. O objetivo deles é ajudar na criação de pesquisas específicas de aplicativos.
Um modelo é uma consulta, mas com suporte adicional para especificar a substituição de modelo.
%campo
Insira a árvore de análise do ftstest atual e substitua todas as referências aos campos na árvore de análise atual pelo campo fornecido.
%(campo1, campo2)%(campo1 campo2)
(A vírgula é opcional.) Crie uma disjunção e, para cada campo, adicione a árvore de análise do ftstest atual à disjunção e, em seguida, substitua todas as referências aos campos no árvore de análise atual pelo campo atual da lista.
Nome | Modelo | Consulta de exemplo | Consulta Expandida |
---|---|---|---|
t1 | %cm:nome | t1:n1 | cm:nome:n1 |
t1 | %cm:nome | t1:”n1” | cm:nome:”n1” |
t1 | %cm:nome | ~t1:n1^4 | ~cm:nome:n1^4 |
t2 | %(cm:nome, cm:título) | t2:”uau” | (cm:nome:”woof” OU cm:título:”woof”) |
t2 | %(cm:nome, cm:título) | ~t2:uau^4 | (~cm:nome:woof OU ~cm:título:woof)^4 |
t3 | %cm:nome E meu:boolean:true | t3:banana | (cm:nome:banana E meu:booleano:true) |
Os modelos podem referir-se a outros modelos.
nameAndTitle -> %(cm:name, cm:title)
nameAndTitleAndDesciption -> %(nameAndTitle, cm:description)
Pesquisar intervalos[](#search-for-ranges)Intervalos inclusivos podem ser especificados no estilo Google. Existe uma sintaxe estendida para intervalos mais complexos. Intervalos ilimitados podem ser definidos usando MIN e MAX para tipos numéricos e de data e “u0000” e “FFFF” para texto (qualquer coisa que seja inválida).
Lucena | Descrição | Exemplo | |
---|---|---|---|
[#1 TO #2] | #1..#2 | O intervalo #1 a #2 inclusive#1 <= x <= #2 | 0..5[0 TO 5] |
<#1 TO #2] | O intervalo #1 a #2 incluindo #2, mas não #1.#1 < x <= #2 | <0 TO 5] | |
[#1 TO #2> | O intervalo #1 a #2 incluindo #1, mas não #2.#1 <= x < #2 | [0 TO 5> | |
<#1 TO #2> | A faixa #1 a #2 exclusiva.#1 < x < #2 | <0 TO 5> |
TEXT:apple..banana
my:int:[0 TO 10]
my:float:2.5..3.5
my:float:0..MAX
mt:text:[l TO "uFFFF"]
Pesquise um único termo[](#search-for-a-single-term)Termos únicos são tokenizados antes da pesquisa de acordo com as definições apropriadas do dicionário de dados.
Se você não especificar um campo, ele pesquisará no conteúdo e nas propriedades. Este é um atalho para pesquisar todas as propriedades do tipo conteúdo. Os termos não podem conter espaços em branco.
banana
TEXT:banana
Ambas as consultas encontrarão quaisquer nós com a palavra “banana” em qualquer propriedade do tipo d:content.
Se a(s) definição(ões) de dicionário de dados apropriada(s) para o campo suportarem tanto a pesquisa FTS quanto a pesquisa sem token, então a pesquisa FTS será usada. O FTS incluirá sinônimos se o analisador os gerar. Os termos não podem conter espaços em branco.
Procure por vãos e posições[](#search-for-spans-and-positions)Vãos e posições não são implementados. As posições dependerão da tokenização.
Qualquer coisa mais detalhada que um *(2) dois depende arbitrariamente da tokenização. Uma correspondência de identificador e padrão, ou dupla FTS e tokenização de ID, pode ser a resposta nesses casos.
term[^] - start
term[$] - end
term[position]
Estes são de uso possível, mas excluídos por enquanto. Extensões surround Lucene:
and(terms etc)
99w(terms etc)
97n(terms etc)
Pesquisar expansão de termo[](#search-for-term-expansion)Para forçar a tokenização e a expansão do termo, prefixe o termo com ~.
Para uma propriedade com índices ID e FTS, onde o índice ID é o padrão, force o uso do índice FTS.
~running
Pesquisar curingas[](#search-for-wildcards)Caracteres curinga são suportados em termos, frases e frases exatas usando * para corresponder a zero, um ou mais caracteres e ? para corresponder a um único caractere .
O * caractere curinga pode aparecer sozinho e implica o estilo do Google. O padrão curinga “anywhere after” pode ser combinado com o prefixo = para correspondência de padrões baseada em identificador. A pesquisa retornará e destacará qualquer palavra que comece com a raiz da palavra truncada pelo caractere curinga *.
A seguir todos encontrarão o termo maçã.
TEXT:app?e
TEXT:app*
TEXT:*pple
appl?
*ple
=*ple
"ap*le"
"***le"
"?????"
Ao realizar uma pesquisa que inclua um caractere curinga, é melhor colocar o termo de pesquisa entre aspas duplas. Isso garante que todos os metadados e conteúdo sejam pesquisados.