O Couchbase Mobile 2.0 apresenta recursos avançados de pesquisa de texto completo (FTS) em seus documentos JSON. Isso faz parte da nova interface de consulta baseada em N1QLa linguagem de consulta declarativa do Couchbase que estende o SQL para JSON. Se você estiver familiarizado com SQL, vai se sentir em casa com a semântica da nova API.
O Full Text Search permite a consulta em linguagem natural. Este é o terceiro de uma série de posts que discute a interface de consulta no Couchbase Lite. Este blog pressupõe que você esteja familiarizado com os fundamentos, portanto, se ainda não o fez, não deixe de revisar o artigo postagem anterior primeiro. Se estiver interessado, os links para blogs que discutem outros recursos da interface do Query são fornecidos no final desta publicação.
Você pode fazer o download da versão de pré-lançamento mais recente do Couchbase Mobile 2.0 em aqui.
Histórico
Se você estava usando as versões 1.x do Couchbase Mobile, provavelmente está familiarizado com Visualizações de mapas para criar índices e consultas. Na versão 2.0, você não precisa mais criar visualizações e funções de mapa! Em vez disso, uma interface simples permite a criação de índices e você pode usar uma interface do Query Builder para construir suas consultas. A nova interface de consulta é mais simples de usar e muito mais poderosa em comparação. Vamos descobrir alguns de seus recursos nesta postagem.
Projeto de amostra
Embora os exemplos discutidos aqui usem o Swift para iOS, observe que, salvo algumas pequenas diferenças, a mesma interface de consulta também é compatível com as plataformas Android e Windows.
Portanto, com alguns pequenos ajustes, você poderá reutilizar os exemplos de consulta desta postagem ao trabalhar com outras plataformas.
Siga as instruções abaixo se você estiver interessado em um projeto Swift de amostra
- Clone o iOS Swift Playground do GitHub
1$ git clone https://github.com/couchbaselabs/couchbase-lite-ios-api-playground - Siga as instruções de instalação no manual correspondente LEIAME para criar e executar o playground.
Modelo de dados de amostra
Usaremos o banco de dados Travel Sample localizado aqui. Você pode incorporar esse banco de dados pré-criado em seu aplicativo móvel e começar a usá-lo para suas consultas.
O conjunto de dados de amostra inclui vários tipos de documentos, conforme identificado pelo tipo
no documento. Vamos nos concentrar em documentos de tipo
"marco" . O modelo de documento JSON é mostrado abaixo. Para fins de brevidade, omitimos do modelo abaixo algumas das propriedades que não são relevantes para esta postagem.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
{ "atividade": "ver", "endereço": "84 rue Claude Monet", "alt": "Fundação Claude Monet", "cidade": "Giverny", "content" (conteúdo): "A casa é discretamente excêntrica e altamente interessante em um estilo influenciado pelo Oriente, e inclui a coleção de Monet de [http://www.intermonet.com/japan/ gravuras japonesas]. Não há pinturas originais de Monet no local - a verdadeira atração são os jardins ao redor da casa...", "país": "França", "direções": nulo, "email": nulo, "geo": { "precisão": "ROOFTOP", "lat": 49.0753489, "longo": 1.5337884 }, "horas": "aberto de abril a outubro, de segunda a segunda, das 9h30 às 18h", "id": 10061, "imagem": nulo, "name" (nome): "Casa de Monet", "telefone": "+33 232512821", "price" (preço): "€9, $5 estudantes, €4 4,00 deficientes, menores de 7 anos grátis", "estado": "Haute-Normandie" (Alta Normandia), "título": "Giverny", "tollfree": nulo, "tipo": "marco", "url": "http://www.fondation-monet.com/" } |
** Consulte o modelo acima para cada um dos exemplos de consulta abaixo. **
O identificador do banco de dados
Nas consultas abaixo, usaremos o Banco de dados
API para abrir/criar o banco de dados CouchbaseLite.
1 2 |
var opções = DatabaseConfiguration() deixar db = tentar Banco de dados(nome: kDBName, configuração: opções) |
O básico
O Full Text Search permite consultas em linguagem natural. Em nossa postagem sobre o Fundamentos da consultadiscutimos o como e regex para operações de correspondência de padrões. O FTS supera esse recurso ao permitir o suporte a derivação, classificação baseada em relevância e consulta em linguagem natural específica do local.
As pesquisas de texto completo são não diferencia maiúsculas de minúsculas e usar o partida
expressão de consulta. Para executar o FTS, você deve criar Índice do texto completo nas propriedades apropriadas. Você pode criar um índice em uma ou mais propriedades.
Derivação
Antes de prosseguirmos com os exemplos, primeiro uma palavra sobre Stemming. Stemming é o processo de reduzir as palavras à sua palavra raiz. Assim, para instânciaOs termos "catty", "catlike" e "cats" são reduzidos à palavra "cat". Portanto, a busca pelo termo "cats" nos daria resultados que correspondem a "cat", "catlike" e assim por diante.
Atualmente, o Couchbase Lite oferece suporte a Stemming nos seguintes idiomas
* Dinamarquês
* Holandês
* Inglês
* finlandês
* Francês
* Alemão
* húngaro
* Italiano
* norueguês
* português
* romeno
* Russo
* espanhol
* sueco
* Turco
Se nenhum idioma específico for usado, o tokenizador ainda dividirá o texto em palavras com caracteres de espaço em branco Unicode. Portanto, ele deve funcionar, embora menos bem, com qualquer idioma que coloque espaços entre as palavras.
Índice do texto completo
O nome
que está associado ao índice durante a criação é importante. Os exemplos de consulta que veremos mais tarde farão referência ao índice apropriado por meio do nome
Índice de propriedade única
O exemplo a seguir cria um fullTextIndex
no "content" (conteúdo) propriedade de um Documento
. Por padrão, a derivação é ativada e a localidade é considerada a localidade do dispositivo. Embora não seja mostrado abaixo, você também tem a opção de especificar se os "acentos" devem ser ignorados ou não por meio da opção ignoreAccents
opção. Por padrão, os acentos não são ignorados.
1 2 |
deixar ftsIndex = IndexBuilder.fullTextIndex(itens: FullTextIndexItem.propriedade("content" (conteúdo))) tentar db.createIndex(ftsIndex,withName: "ContentFTSIndex") |
Índice de propriedades múltiplas
O exemplo a seguir cria um fullTextIndex
em "content" (conteúdo) e "name" (nome) propriedades de um Documento
1 2 |
deixar ftsIndex = IndexBuilder.fullTextIndex(itens: FullTextIndexItem.propriedade("content" (conteúdo)),FullTextIndexItem.propriedade("name" (nome))) tentar db.createIndex(ftsIndex,withName: "ContentAndNameFTSIndex") |
Índice sem stemização
O exemplo a seguir cria um fullTextIndex
no "content" (conteúdo) propriedade de um Documento
com o stemming desativado. O stemming é ativado por padrão usando as configurações atuais de idioma do dispositivo. Definir o idioma como nulo desabilitará o stemming.
1 2 |
deixar ftsIndex = IndexBuilder.fullTextIndex(itens: FullTextIndexItem.propriedade("content" (conteúdo))).idioma(nulo) tentar db.createIndex(ftsIndex,withName: "ContentFTSIndexNoStemming") |
Pesquisa FTS com Stemming
A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo
documentos que contêm o termo "Mecânica" no "content" (conteúdo) propriedade. Usamos o "ContentFTSIndex" que foi criado anteriormente.
Solicitação
1 2 3 4 5 6 7 8 9 |
deixar ftsExpression = FullTextExpression.índice("ContentFTSIndex") deixar pesquisa = Criador de consultas .selecionar(SelecionarResultado.expressão(Meta.id), SelecionarResultado.expressão(Expressão.propriedade("content" (conteúdo)))) .de(Fonte de dados.banco de dados(db)) .onde( Expressão.propriedade("tipo").igual a(Expressão.string ("marco")) .e( ftsExpression.partida("Mecânica"))) .limite(Expressão.int(limite)) |
Resposta de amostra
A resposta à consulta acima incluirá documentos que contêm os termos "mechanical", "mechanism", "mechanisms", "mechanic" e assim por diante.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[ { "id": "landmark_21703", "content" (conteúdo): "O fabricante suíço de relógios de luxo, fundado em 1851, é conhecido por sua mecânica precisa." }, { "id": "landmark_2592", "content" (conteúdo): "Aqui você pode ver os mecanismos que acionam os famosos teleféricos de São Francisco, bem como muitas recordações e informações sobre a história dos teleféricos." }, { "id": "landmark_26144", "content" (conteúdo): "Essa seção cênica da Golden Gate National Recreation Area é a favorita dos caminhantes, ciclistas e banhistas, com montanhas costeiras escarpadas e dunas de areia profundas. O voo de asa delta é bastante popular aqui, com várias lojas de asa delta na área. Nas proximidades, encontram-se os restos da Battery Davis, um mecanismo de defesa militar da época da Segunda Guerra Mundial." }, { "id": "landmark_33234", "content" (conteúdo): "A churrascaria em estilo ocidental apresenta um enorme bar 'country' e até mesmo um touro mecânico para aqueles que estão prontos para uma aventura de montar um touro falso. O cardápio é vasto e surpreendentemente barato. E, mais uma vez, o saloon é um destino que está na moda há muito tempo ao longo da Sunset Strip para bons momentos de diversão." } ] |
Pesquisa FTS sem Derivação
A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo
documentos que contêm o termo exato "Mecânica" no "content" (conteúdo) propriedade. Usamos o "ContentFTSIndexNoStemming" que foi criado anteriormente e que especificava a opção de desativar o stemming.
Solicitação
1 2 3 4 5 6 7 8 |
deixar ftsExpression = FullTextExpression.índice("ContentFTSIndexNoStemming") deixar pesquisa = Criador de consultas .selecionar(SelecionarResultado.expressão(Meta.id), SelecionarResultado.expressão(Expressão.propriedade("content" (conteúdo)))) .de(Fonte de dados.banco de dados(db)) .onde(Expressão.propriedade("tipo").igual a(Expressão.string ("marco")) .e( ftsExpression.partida("Mecânica"))) .limite(Expressão.int(limite)) |
Resposta de amostra
A resposta à consulta acima incluirá documentos que contêm exatamente o termo "mechanical". Observe novamente que todas as pesquisas não diferenciam maiúsculas de minúsculas.
1 2 3 4 5 6 7 |
[ { "id": "landmark_33234", "content" (conteúdo): "A churrascaria em estilo ocidental apresenta um enorme bar 'country' e até mesmo um touro mecânico para aqueles que estão prontos para uma aventura de montar um touro falso. O cardápio é vasto e surpreendentemente barato. E, mais uma vez, o saloon é um destino que está na moda há muito tempo ao longo da Sunset Strip para bons momentos de diversão." } ] |
Pesquisa FTS em várias propriedades
A consulta abaixo busca o id , nome e conteúdo propriedades de "marco" tipo
documentos que contêm o termo "Mecânica" no "name" (nome) ou o "content" (conteúdo) propriedade. Usamos o "ContentAndNameFTSIndex" que foi criado anteriormente. Esse índice habilitou a indexação no "name" (nome) e "content" (conteúdo) propriedades
Solicitação
1 2 3 4 5 6 7 8 9 |
deixar ftsExpression = FullTextExpression.índice("ContentAndNameFTSIndex") deixar pesquisa = Criador de consultas .selecionar(SelecionarResultado.expressão(Meta.id), SelecionarResultado.expressão(Expressão.propriedade("name" (nome))), SelecionarResultado.expressão(Expressão.propriedade("content" (conteúdo)))) .de(Fonte de dados.banco de dados(db)) .onde(Expressão.propriedade("tipo").igual a(Expressão.string ("marco")) .e( ftsExpression.partida("Mecânica"))) .limite(Expressão.int(limite)) |
Resposta de amostra
A resposta à consulta acima incluirá documentos que contêm o termo "mechanical" (ou variantes dele derivadas por meio de stemming) na propriedade "name" ou "content".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[ { "id": "landmark_10062", "name" (nome): "Museu de Mecânica Natural", "content" (conteúdo): "Fundada pelos irmãos Guillemard: Jean-Pierre, René e Gérard atualmente realizam restaurações e exposições com a ajuda de uma equipe de entusiastas que dedicam seu tempo e conhecimento à preservação do patrimônio. A origem do museu é uma coleção particular de motores a vapor de combustão interna, fundada em 1955 pela família Guillemard, residente em GIVERNY há várias gerações." }, { "id": "landmark_21703", "name" (nome): "Salões Patek Philippe", "content" (conteúdo): "O fabricante suíço de relógios de luxo, fundado em 1851, é conhecido por sua mecânica precisa." }, { "id": "landmark_25929", "name" (nome): "Museu do Teleférico", "content" (conteúdo): "Aqui você pode ver os mecanismos que acionam os famosos teleféricos de São Francisco, bem como muitas recordações e informações sobre a história dos teleféricos" }, { "id": "landmark_26144", "name" (nome): "Forte Funston", "content" (conteúdo): "Essa seção panorâmica da Golden Gate National Recreation Area é a favorita de quem faz caminhadas, anda de bicicleta e vai à praia, com montanhas costeiras escarpadas e dunas de areia profundas. O voo de asa delta é bastante popular aqui, com várias lojas de asa delta na área. Nas proximidades, encontram-se os restos da Battery Davis, um mecanismo de defesa militar da época da Segunda Guerra Mundial" } ] |
Pesquisa FTS com expressões lógicas
Em um exemplo anterior, você viu que, ao desativar o stemming, é possível procurar a string de pesquisa exata. Mas e se você quisesse procurar mais de um termo de pesquisa? O partida
A expressão de consulta aceita expressões lógicas, incluindo AND e OR.
A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo
documentos que contêm o termo "Mecânica" ou "Mecanismo" no "content" (conteúdo) propriedade. Usamos o "ContentFTSIndexNoStemming" que foi criado anteriormente para desativar o stemming.
Solicitação
1 2 3 4 5 6 7 8 |
deixar ftsExpression = FullTextExpression.índice("ContentFTSIndexNoStemming") deixar pesquisa = Criador de consultas .selecionar(SelecionarResultado.expressão(Meta.id), SelecionarResultado.expressão(Expressão.propriedade("content" (conteúdo)))) .de(Fonte de dados.banco de dados(db)) .onde(Expressão.propriedade("tipo").igual a(Expressão.string ("marco")) .e( ftsExpression.partida("Mecânico OU Mecanismo"))) .limite(Expressão.int(limite)) |
Resposta de amostra
A resposta à consulta acima incluirá documentos que contenham exatamente os termos "mechanical" ou "mechanism" na propriedade "content".
1 2 3 4 5 6 7 8 9 10 11 |
[ { "id": "landmark_26144", "content" (conteúdo): "Essa seção panorâmica da Golden Gate National Recreation Area é a favorita de quem faz caminhadas, anda de bicicleta e vai à praia, com montanhas costeiras escarpadas e dunas de areia profundas. O voo de asa delta é bastante popular aqui, com várias lojas de asa delta na área. Nas proximidades, encontram-se os restos da Battery Davis, um mecanismo de defesa militar da época da Segunda Guerra Mundial" }, { "id": "landmark_33234", "content" (conteúdo): "A churrascaria em estilo ocidental apresenta um enorme bar 'country' e até mesmo um touro mecânico para aqueles que estão prontos para uma aventura de montar um touro falso. O cardápio é vasto e surpreendentemente barato. E, mais uma vez, o saloon é um destino que está na moda há muito tempo ao longo da Sunset Strip para bons momentos de diversão." } ] |
Pesquisa FTS com expressão Wilcard
Você pode usar o caractere "*" na cadeia de pesquisa para representar zero ou mais correspondências de caracteres.
A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo
documentos que contêm o termo "walt*" no "content" (conteúdo) propriedade. Isso corresponderá a todos os termos de pesquisa que começam com "walt" seguido de zero ou mais caracteres. Usamos a propriedade "ContentFTSIndex" que foi criado anteriormente.
OBSERVAÇÃO: Pode-se argumentar que o uso de curingas no termo de pesquisa pode ser uma maneira ingênua de implementar o stemming. Mas, nesse caso, você pode acabar com formas derivadas que podem não corresponder aos termos derivados por stemming. Portanto, é preferível usar o stemming se for isso que você precisa.
Solicitação
1 2 3 4 5 6 7 8 |
deixar ftsExpression = FullTextExpression.índice("ContentFTSIndex") deixar pesquisa = Criador de consultas .selecionar(SelecionarResultado.expressão(Meta.id), SelecionarResultado.expressão(Expressão.propriedade("content" (conteúdo)))) .de(Fonte de dados.banco de dados(db)) .onde(Expressão.propriedade("tipo").igual a(Expressão.string ("marco")) .e( ftsExpression.partida("walt*"))) .limite(Expressão.int(limite)) |
Resposta de amostra
A resposta à consulta acima incluirá documentos que contêm os termos "walt", "Walter", "Waltham", "Walthamstow" e assim por diante.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[ { "id": "landmark_10134", "content" (conteúdo): "No tour pelo Ibrox, você tem acesso ao vestiário do time da casa e ouve uma mensagem gravada de Walter Smith e Ally McCoist antes de subir a escadaria de mármore, visitar a ilustre sala de troféus, a sala azul e o escritório da diretoria. Os ingressos, exceto para os jogos contra o Celtic, estão disponíveis on-line no site do clube, na central de ingressos do estádio e nas lojas do clube na JJB Sports Stores no centro da cidade de Glasgow." }, { "id": "landmark_16104", "content" (conteúdo): "Apresenta a história de Waltham Forest. O prédio foi construído para ser uma casa de trabalho e, desde então, tem sido usado como delegacia de polícia e residência particular. Sua coleção inclui o carro Bremer, construído pelo engenheiro Frederick Bremer em 1892, que tem a pretensão de ser o primeiro carro movido a gasolina fabricado na Grã-Bretanha." }, { "id": "landmark_16105", "content" (conteúdo): "O antigo núcleo da atual Walthamstow se concentrava em torno da Igreja St. Marys, do século XII. }, { "id": "landmark_16574", "content" (conteúdo): "O Dorothy Chandler Pavilion é aberto ao público na véspera de Natal, com apresentações quase ininterruptas de grupos amadores de artes culturais. O Walt Disney Hall tem passeios diários, consulte o site para saber os horários." }, { "id": "landmark_8631", "conteúdo": "Museu sobre autores escoceses famosos, com foco em Robert Burns, Sir Walter Scott e Robert Louis Stevenson" } ] |
Pesquisa FTS com palavras de parada
As stop words referem-se a palavras comuns em um idioma. Em inglês, seriam termos como "the", "is", "and", "which" e assim por diante.
Exemplo 1: A cadeia de pesquisa contém palavras de parada
O Couchbase Lite ignora as palavras de parada que aparecem na string de pesquisa.
A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo
documentos que contêm o termo "sobre a história" no "content" (conteúdo) propriedade. Usamos o "ContentFTSIndex" que foi criado anteriormente.
O Couchbase Lite ignora as palavras de parada "on" e "the", portanto, você buscaria documentos que incluíssem apenas o termo "history" e as formas derivadas da palavra de origem
Solicitação
1 2 3 4 5 6 7 |
deixar ftsExpression = FullTextExpression.índice("ContentFTSIndex") deixar pesquisa = Criador de consultas.selecionar(SelecionarResultado.expressão(Meta.id), SelecionarResultado.expressão(Expressão.propriedade("content" (conteúdo)))) .de(Fonte de dados.banco de dados(db)) .onde(Expressão.propriedade("tipo").igual a(Expressão.string ("marco")) .e( ftsExpression.partida("sobre a história"))) .limite(Expressão.int(limite)) |
Resposta de amostra
A resposta à consulta acima incluirá documentos que contêm os termos "history" e formas derivadas dessa palavra, como "historical"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[ { "id": "landmark_10019", "content" (conteúdo): "Museu sobre engenharia militar e a história do Império Britânico. Uma coleção bastante extensa que leva cerca de meio dia para ser vista. De maior interesse para os fãs da história britânica e militar ou da engenharia civil." }, { "id": "landmark_10083", "content" (conteúdo): " Os passeios duram cerca de 45 minutos. Em frente ao edifício, a George Square, o centro fictício da cidade, é povoada por várias estátuas de líderes cívicos e figuras famosas da história e é frequentemente usada para eventos ao ar livre." }, { "id": "landmark_10093", "content" (conteúdo): "O auditório ganhou fama mundial por ser o local onde foi filmado o teste de Susan Boyle, um dos videoclipes do YouTube mais baixados da história." }, { "id": "landmark_10101", "content" (conteúdo): "Esse museu tem uma grande coleção de artefatos e exposições que mostram a história da cidade. Se não quiser pagar para entrar no museu propriamente dito, você pode simplesmente entrar no prédio (que contém três museus separados) e ver algumas fotografias históricas nas paredes do átrio." }, { "id": "landmark_10105", "content" (conteúdo): "O Peoples Palace é um excelente museu folclórico, que conta a história de Glasgow e de seu povo, a partir de várias perspectivas, exibindo detalhes da vida em Glasgow (inclusive uma das botas de banana de Billy Connolly). O Winter Gardens, ao lado, é uma estufa agradável com uma cafeteria razoável)." } ] |
Exemplo 2: Ignorando palavras de parada durante a pesquisa
Por padrão, o Couchbase Lite ignora palavras de parada no conteúdo da pesquisa.
A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo
documentos que contêm os termos "barbatana azul barbatana amarela" no "content" (conteúdo) propriedade. Usamos o "ContentFTSIndex" que foi criado anteriormente.
O Couchbase Lite ignora palavras de parada durante a pesquisa, portanto, você buscaria documentos que incluíssem os termos "blue", "fin" e "yellow" nessa ordem, separados por qualquer número de palavras de parada.
Solicitação
1 2 3 4 5 6 7 |
deixar ftsExpression = FullTextExpression.índice("ContentFTSIndex") deixar pesquisa = Criador de consultas.selecionar(SelecionarResultado.expressão(Meta.id), SelecionarResultado.expressão(Expressão.propriedade("content" (conteúdo)))) .de(Fonte de dados.banco de dados(db)) .onde(Expressão.propriedade("tipo").igual a(Expressão.string ("marco")) .e( ftsExpression.partida("barbatana azul barbatana amarela"))) .limite(Expressão.int(limite))<código classe="rápido"> |
Resposta de amostra
A resposta à consulta acima incluirá documentos que contêm os termos "blue" (azul), "fin" (barbatana) e "yellow" (amarelo) separados por qualquer número de palavras de parada, como "blue fin and yellow fin" (barbatana azul e barbatana amarela)
1 2 3 4 5 6 7 |
[ { "id": "landmark_18840", "content" (conteúdo): "Esse grande aquário é especializado na exibição da vida marinha local em habitats típicos da região e tem muitas exposições espetaculares. É particularmente conhecido por sua exposição Kelp Forest, com três andares de altura, repleta de diversas variedades de algas gigantes e uma grande variedade de espécies de animais marinhos, e também por sua exposição Open Sea de um milhão de galões com grandes atuns de barbatana azul e amarela, mahi-mahis, tubarões (incluindo um grande tubarão branco ocasional como visitante temporário, antes de ser liberado de volta ao oceano), peixes-lua oceânicos (mola-molas) e tartarugas marinhas. As melhores exibições incluem um grande tanque de sardinhas prateadas que nadam sem parar acima da cabeça do visitante e um tanque de lontras marinhas resgatadas, consideradas irrecuperáveis na natureza e, portanto, mantidas no aquário. )" } ] |
Pesquisa FTS com classificação
Você pode usar o FullTextFunction.rank
para especificar a ordem de classificação dos resultados da pesquisa. Isso é útil para classificar as correspondências na ordem da melhor correspondência.
A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo
documentos que contêm o termo "atrair" no "content" (conteúdo) propriedade. Os documentos são ordenados em ordem decrescente de acordo com a classificação, o que significa que o documento com o número máximo de correspondências é classificado acima dos demais.
Solicitação
1 2 3 4 5 6 7 8 |
deixar ftsExpression = FullTextExpression.índice("ContentFTSIndexNoStemming") deixar pesquisa = Criador de consultas.selecionar(SelecionarResultado.expressão(Meta.id), SelecionarResultado.expressão(Expressão.propriedade("content" (conteúdo)))) .de(Fonte de dados.banco de dados(db)) .onde(Expressão.propriedade("tipo").igual a(Expressão.string ("marco")) .e( ftsExpression.partida("atrair"))) .orderBy(Pedidos.expressão(FullTextFunction.classificação("ContentFTSIndexNoStemming")).descendente()) .limite(Expressão.int(limite)) |
Resposta de amostra
A resposta à consulta acima incluirá documentos que incluem o termo "atrair" ou versões derivadas dele. Os documentos com o número máximo de correspondências são classificados em ordem superior.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[ { "id": "landmark_22056", "content" (conteúdo): "A atração para visitantes mais bem paga do País de Gales inclui uma fazenda, parque de diversões vintage interno, zoológico e jogos de aventura internos e externos. Atração familiar para todos os climas, com 50% de atrações cobertas." }, { "id": "landmark_16309", "content" (conteúdo): "A London Bridge Experience e a London Tombs são duas atrações assustadoras por um preço único e foram eleitas a melhor atração assustadora do Reino Unido durante todo o ano por três anos consecutivos." }, { "id": "landmark_25216", "content" (conteúdo): "TA parque de diversões à beira-mar localizado próximo à extremidade sul de Mission Beach, o Belmont Park é um ponto de referência com várias lojas, restaurantes, um salão de jogos e vários brinquedos. A grande atração é a Giant Dipper, uma montanha-russa histórica que é uma das duas únicas montanhas-russas à beira-mar ainda em funcionamento na costa oeste. Entre os outros brinquedos estão o FlowRider (uma atração que simula ondas e na qual você pode praticar bodyboard), um carrossel antigo, carrinhos de bate-bate, escorregadores, passeios de pêndulo, tilt-a-whirl e um trampolim " }, { "id": "landmark_1059", "content" (conteúdo): "Tem como objetivo contar a história do voo ao longo do século XX e possui uma grande coleção de aeronaves, incluindo o Concorde G-BOAA da British Airways. Outra atração muito boa (e que vale a pena dar uma olhada) é o De-Havilland Comet 4C, um derivado do primeiro avião a jato do mundo." } ] |
Limitações
Embora a capacidade do FTS no Couchbase Lite 2.0 seja extremamente avançada e seja suficiente para casos de uso típicos de um banco de dados incorporado, há algumas limitações
- A expressão de correspondência só pode estar no nível superior ou na expressão AND de nível superior. Isso significa que a seguinte expressão não é permitida ftsExpression.match("attract").or(ftsExpression2.match("museum"))
- Tokenizadores de idiomas personalizados
A lista de idiomas compatíveis foi especificada anteriormente. No momento da redação deste post, não é possível conectar um tokenizador personalizado para ampliar o suporte a outros idiomas - Suporte à pesquisa difusa
Não podemos especificar um fator de "imprecisão" na consulta, o que pode resultar na consideração de correspondências menos relevantes - Facetas
Não há suporte para pesquisa facetada
Lembre-se de que o Couchbase Lite é um banco de dados incorporado. Portanto, pode-se argumentar que os recursos do FTS não precisam ser tão extensos quanto uma implementação de banco de dados no lado do servidor. O suporte a esses recursos será avaliado em versões futuras.
O que vem a seguir
Esta postagem do blog analisou como você pode aproveitar os recursos de pesquisa de texto completo (FTS) na nova API de consulta do Couchbase Mobile 2.0. Isso é um começo. Espere ver mais funcionalidades em versões futuras. Você pode fazer o download da versão mais recente em nosso downloads página.
Aqui estão algumas outras postagens relacionadas ao Couchbase Mobile Query que podem ser de interesse
- Isso postagem no blog discute os fundamentos
- Isso postagem no blog discute como consultar coleções de matrizes
- Isso postagem no blog discute como fazer consultas JOIN
Se tiver dúvidas ou comentários, deixe um comentário abaixo ou entre em contato comigo pelo Twitter @rajagp ou envie-me um e-mail priya.rajagopal@couchbase.com. O Fóruns do Couchbase são outro bom lugar para entrar em contato com perguntas.