11 Şubat 2021 Perşembe

Elasticsearch query_string Sorgusu - Full Text Search İçindir

Giriş
Açıklaması şöyle.
Supports the compact Lucene query string syntax, allowing you to specify AND|OR|NOT conditions and multi-field search within a single query string. For expert users only.
Açıklaması şöyle
The query string is parsed into a series of terms and operators. A term can be a single word — quick or brown — or a phrase, surrounded by double quotes — "quick brown" — which searches for all the words in the phrase, in the same order.
Örnek
Bu örnekte AND|OR gibi boolean işlemler yapılmıyor. Aslında match sorgusu ile benzer şekildedir. 
Elimizde şöyle bir sorgu olsun. Sıra (yani order) önemli olmadığı için tüm dokümanları döner.
{
  "query": {
    "query_string": {
      "query": "hello World"
    }
  }
}
Ancak aynı sorgu şöyle olsun. Bu durumda tırnak kullanıldığından sıra önemli olur ve sonuç olarak sadece 1 ve 2. dokümanları alırız. 0. doküman sonuca dahil olmaz.
{
  "query": {
    "query_string": {
      "query": "\"Hello World\""
} } }
Örnek
Bu örnekte AND|OR gibi boolean işlemler yapılmıyor. Aslında match sorgusu ile benzer şekildedir.
Çoklu alan sorgusu yapmak istersek şöyle yaparız. Burada aynı zamanda wildcard kullanılıyor
"query": {
    "query_string": {
        "query": "*mar*",
        "fields": ["user.name", "user.surname"]
    }
}
Örnek
Elimizde şöyle bir kod olsun
public interface ProductRepository extends ElasticsearchRepository<Product, String> {
 
  List<Product> findByName(String name);
  
  List<Product> findByNameContaining(String name);
 
  List<Product> findByManufacturerAndCategory (String manufacturer, String category);
}
Çıktı olarak şunu alırız. Burada AND işlemi için "must" kullanıldığı görülebilir.
findByName() için
POST /productindex/_search? ..: 
Request body: {.."query":{
  "bool":{
    "must":[
      {"query_string":{"query":"apple","fields":["name^1.0"],..}

findByManufacturerAndCategory() için 
POST /productindex/_search..: 
Request body: {..
  "query":{
    "bool":{
      "must":[
        {"query_string":{"query":"samsung","fields":["manufacturer^1.0"],..}},
        {"query_string":{"query":"laptop","fields":["category^1.0"],..}}],..}},
        "version":true}

Hiç yorum yok:

Yorum Gönder