2016-04-13 31 views
0

Elasticsearch 2.2.0 kullanıyorum ama bu aynı zamanda 1.x sürümlerinde de oluyor.Elastic Search: basit sorgu beklenen sonuçları döndürmüyor

Metin alanlarından biri google.com kelimesini içerir. Google arama yapmaya çalıştığımda, ElasticSearch hiçbir şey döndürmez. Ancak google.com’u ararsam, onu içeren belgeyi döndürür.

Benim sorgu, böyle bir şey basittir:

query: { 
    filtered: { 
    query: { 
     simple_query_string: { 
     query: "google" 
     } 
    } 
    } 
} 

Ben google için arama yaparken Elastik arama belgesi döndürür yapmak ne yapmalıyım?

+0

Joker sorgusuyla denediniz mi? – AlainIb

+0

@AlainIb google *? Evet, bu durumda, istemediğim belgeyi + sorguyla tamamen ilgili olmayan çok sayıda belgeyi döndürür. – Fernando

cevap

0

simple_query_string olduğu hiçbiri belirtilen bu alanı kullanır çünkü _all alanı ile ilgili the documentation okumanızı öneririz senin vaka.

_allgoogle.com. bölünmüş edilmez ve google.com olarak endeksli anlamına gelir standard analizörü, varsayılan olarak endekslenir. Bu, google.com aramasının dizininizde bu terimi aradığı anlamına gelir, ancak metninizde google var.

Elasticsearch'te arama, yalnızca sorgusuyla ilgili değil, aynı zamanda verileri dizine ekleme biçiminizle de ilgilidir. LIKE ile SQL sorgusu kadar basit olmayabilir, ancak aynı zamanda ES, adresinde SQL'den ekler daha fazla güç verir. Eğer gelen istediğinize bağlı

senin simple_query seçtiğiniz için birden fazla seçenek bulunmaktadır:

  • değişim _all alanın analizörü:
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "letter": { 
      "type": "custom", 
      "tokenizer": "letter", 
      "filter": [ 
      "lowercase" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "test": { 
     "_all": { 
     "analyzer": "letter" 
     } 

ve sorgu:

"query": { 
    "simple_query_string": { 
     "query": "google" 
    } 
    } 
  • değişiklik field ve ** ait analizörü query_string_query bu alanı kullanabilirsiniz:
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "letter": { 
      "type": "custom", 
      "tokenizer": "letter", 
      "filter": [ 
      "lowercase" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "test": { 
     "properties": { 
     "text": { 
      "type": "string", 
      "analyzer": "letter" 
     } 
     } 

Ve sorguyu:

"query": { 
    "simple_query_string": { 
     "query": "google", 
     "fields": ["text"] 
    } 
    } 
tanımlamak
0

ben "joker" sorgusu ile sorgunun bu tür yapmak

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html

{ 
    "query": { 
    "bool": { 
     "must": { 
     "wildcard": { 
      "fieldname": "google*" // replace the fieldname her 
     } 
     } 
    } 
    } 
} 
+0

Kullanıcılarıma simple_query'yi gösteriyorum çünkü bazen "term1 -term2" gibi şeyler kullanıyorlar. Sadece google araması yaparak sonuçları döndürmek için simple_query öğesini ayarlamak mümkün değil mi? LIKE ile bir SQL sorgusu bu sonucu (oldukça açık olan) döndüreceğinden, basit bir şey gibi görünüyor. – Fernando