Pular para o conteúdo principal

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:

  1. 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.
  2. "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.
  3. 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.
  4. =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.
  5. ~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.
  6. 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.
  7. 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.
  8. [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.
  9. 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
NOTA!

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:

  1. 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.
  2. 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.
  3. 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 retornaria 2020-10-24T17:00:00.000Z.
  4. 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.
  5. 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.
  6. 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 retornaria 2020-10-24T00:00:00.000Z.

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”
NOTA!

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.

NOTA!

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.

TipoDescrição
PropriedadeImóvel totalmente qualificado, por exemplo{http://www.alfresco.org/model/content/1.0}name:apple
PropriedadeImóvel totalmente qualificado, por exemplo@{http://www.alfresco.org/model/content/1.0}name:apple
PropriedadePropriedade de estilo CMIS, por exemplo cm\_name:apple.
PropriedadePropriedade de estilo de prefixo, por exemplo cm:name:apple.
PropriedadePropriedade de estilo de prefixo, por exemplo @cm:name:apple.
PropriedadeTEXTO, por exemplo TEXT:apple.
EspecialID, por exemplo ID:"NodeRef"
EspecialISROOT, por exemplo ISROOT:T
EspecialTexas, por exemplo TX:"TX"
EspecialPAIS, por exemplo PARENT:"NodeRef"
EspecialPRIMARYPARENT, por exemplo PRIMARYPARENT:"NodeRef"
EspecialQNAME, por exemplo QNAME:"app:company\_home"
EspecialCLASSE, por exemplo CLASS:"qname"
EspecialEXACTCLASS, por exemplo EXACTCLASS:"qname"
EspecialTIPO, por exemplo TYPE:"qname".
EspecialEXACTTYPE, por exemplo EXACTTYPE:"qname"
EspecialASPECT por exemplo ASPECT:"qname"
EspecialEXACTASPECT, por exemplo EXACTASPECT:"qname"
EspecialISUNSET por exemplo ISUNSET:"property-qname"
EspecialISNULL, por exemplo ISNULL:"property-qname"
EspecialISNOTNULL, por exemplo ISNOTNULL:"property-qname"
EspecialEXISTE, por exemplo EXISTS:"name of the property"
EspecialSITE, por exemplo SITE:"shortname of the site"
EspecialTAG. TAG: “nome da tag” Observação: TAG deve estar em letras maiúsculas.
Tipo de dados totalmente qualificadoTipo de dados, http://www.alfresco.org/model/dictionary/1.0}content:apple
tipo de dados prefixadoTipo 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”.

OperadorDescriçã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 doggrande e cachorro devem ocorrer
+big AND +doggrande e cachorro devem ocorrer
big AND +doggrande e cachorro devem ocorrer
+big AND doggrande e cachorro devem ocorrer
big AND |doggrande deve ocorrer e cachorro deve ocorrer
|big AND doggrande deve ocorrer e cachorro deve ocorrer
|big AND |dogtanto grande quanto cachorro devem ocorrer, e pelo menos um deve corresponder
big AND -doggrande deve ocorrer e cachorro não deve ocorrer
-big AND doggrande não deve ocorrer e cachorro deve ocorrer
-big AND -dogtanto grande quanto cachorro não devem ocorrer
|big AND -doggrande deve ocorrer e cachorro não deve ocorrer
OU (nenhum prefixo é igual a +)Descrição
dog OR wolfcão e lobo devem ocorrer, e pelo menos um deve corresponder
+dog OR +wolfcão e lobo devem ocorrer, e pelo menos um deve corresponder
dog OR +wolfcão e lobo devem ocorrer, e pelo menos um deve corresponder
+dog OR wolfcão e lobo devem ocorrer, e pelo menos um deve corresponder
dog OR |wolfcão e lobo devem ocorrer, e pelo menos um deve corresponder
|dog OR wolfcão e lobo devem ocorrer, e pelo menos um deve corresponder
|dog OR |wolfcão e lobo devem ocorrer, e pelo menos um deve corresponder
dog OR -wolfcão deveria ocorrer e lobo não deveria ocorrer, uma das cláusulas deve ser válida para qualquer resultado
-dog OR wolfcão não deveria ocorrer e lobo deveria ocorrer, uma das cláusulas deve ser válida para qualquer resultado
-dog OR -wolfcão e lobo não devem ocorrer, uma das cláusulas deve ser válida para qualquer resultado
Incorporar consultas no CMIS[](#embed-queries-in-cmis)

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);

Modelos[](#templates)

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.

NomeModeloConsulta de exemploConsulta Expandida
t1%cm:nomet1:n1cm:nome:n1
t1%cm:nomet1:”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:truet3: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).

LucenaGoogleDescriçãoExemplo
[#1 TO #2]#1..#2O intervalo #1 a #2 inclusive#1 <= x <= #20..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.