Como procurar na pesquisa elastica

estou a usar a pesquisa elastica para filtrar e procurar a partir do ficheiro json e sou novato nesta tecnologia. Então eu estou um pouco confuso como escrever como consulta na pesquisa elastica.

select * from table_name where 'field_name' like 'a%'
Esta é a pergunta mysql. Como escrevo esta consulta na pesquisa elastica? Eu estou Usando elasticsearch versão 0.90.7.

Author: Peter Featherstone, 2015-07-02

2 answers

Eu sugeriria altamente actualizar a sua versão ElasticSearch se possível, houve alterações significativas desde 0.9.x.

Esta questão não é suficientemente específica, pois há muitas maneiras de a ElasticSearch poder cumprir esta funcionalidade, e elas diferem ligeiramente no seu objectivo global. Se você está procurando replicar essa consulta SQL exatamente, então, neste caso, use a consulta wildcard ou a consulta de prefixo.

Usando um wildcard query:

Nota: Tenha cuidado com as buscas por cartões são lentas. Evite usar wildcards no início de suas cordas.

GET /my_index/table_name/_search
{
    "query": {
        "wildcard": {
            "field_name": "a*"
        }
    }
}

Ou pesquisa com prefixo

GET /my_index/table_name/_search
{
    "query": {
        "prefix": {
            "field_name": "a"
        }
    }
}

Ou correspondência parcial:

Nota: do NOT blindly use partial matching, while there are corner cases for it's use, correct use of analyzers is almost always better.

Também esta consulta exata será equivalente a LIKE '%a%', que novamente, poderia ser melhor configurada com o uso correto do mapeamento e uma consulta normal procurem!

GET /my_index/table_name/_search
{
    "query": {
        "match_phrase": {
            "field_name": "a"
        }
    }
}

Se estás a ler isto a perguntar-te sobre o ES de forma semelhante para o tipo de pesquisa, eu sugeriria ler em edge-ngrams , que se relacionam com o uso adequado do mapeamento, dependendo do que estás a tentar fazer=)

 19
Author: Daniel Hoffmann-Mitscherling, 2015-07-02 05:49:55
GET /indexName/table_name/_search
{
    "query": {
        "match_phrase": {
            "field_name": "your partial text"
        }
    }
}

Pode usar "type" : "phrase_prefix" para prefixar ou publicar a sua procura Código Java para o mesmo:

AndFilterBuilder andFilterBuilder = FilterBuilders.andFilter();
 andFilterBuilder.add(FilterBuilders.queryFilter(QueryBuilders.matchPhraseQuery("field_name",
          "your partial text")));

Deu o exemplo 'e filtrar' para que possa adicionar filtros extra, se quiser. Assinale isto para mais detalhes:

Https://www.elastic.co/guide/en/elasticsearch/guide/current/slop.html

 0
Author: Pranav Mishra, 2015-07-02 05:25:15