2013-05-29 5 views
0

У меня есть запрос, как показано ниже,Elasticsearch поисковый запрос возвращает только точные совпадения

Любые идеи, почему я получаю только точные результаты матча, когда я искать. Например ;

Когда я ищу «Aegli» Я получаю результаты, но когда я ищу «Aegl» Нет результатов не дал

query = { 
    "query": { 
    "query_string": { 
     "query": "%s"%q 
    } 
    }, 
    "filter": { 
    "term": { 
     "has_product": 1 
    } 
    }, 
    "facets": { 
    "destination": { 
     "terms": { 
     "field": "destination.en" 
     }, 
     "facet_filter": { 
     "term": { 
      "has_product": 1 
     } 
     } 
    }, 
    "hotel_class": { 
     "terms": { 
     "field": "hotel_class" 
     }, 
     "facet_filter": { 
     "term": { 
      "has_product": 1 
     } 
     } 
    }, 
    "hotel_type": { 
     "terms": { 
     "field": "hotel_type" 
     }, 
     "facet_filter": { 
     "term": { 
      "has_product": 1 
     } 
     } 
    } 
    } 
} 
+0

Вот как перевернутая индекс, как Lucene должен работать. Вы можете либо решить индексировать ngrams (но ваш индекс будет расти очень быстро), либо использовать подстановочный запрос (медленнее). – javanna

ответ

0

Я не вижу свой реальный запрос, но вы, возможно, отсутствует * в конце поиска слово и строка запроса должны быть похожи;

{"query_string": {"query": "%s*"} 

Например,

{"query_string": {"query": "Aegl*"} 
+0

Я думаю, что это то, что нужно решить с помощью токенизаторов NGRAM. Этот метод может быть плохим для масштабирования. – tunaktunak

+1

Вы можете посмотреть здесь, чтобы обсудить токенизаторы http://stackoverflow.com/questions/16816628/fetch-all-documents-if-source-contains-the-given-search-text-in-elastic-search- s – jackdbernier

0

Имея отображение как ниже

{ 
    "mappings": { 
     "hotel": { 
      'properties': {"name": { 
       "type": "string", 
       "search_analyzer": "str_search_analyzer", 
       "index_analyzer": "str_index_analyzer" 
      } 
      }}, 

    }, 

    "settings": { 
     "analysis": { 
      "analyzer": { 
       "str_search_analyzer": { 
        "tokenizer": "keyword", 
        "filter": ["lowercase"] 
       }, 

       "str_index_analyzer": { 
        "tokenizer": "keyword", 
        "filter": ["lowercase", "substring"] 
       } 
      }, 

      "filter": { 
       "substring": { 
        "type": "nGram", 
        "min_gram": 1, 
        "max_gram": 20 
       } 
      } 
     } 
    } 
} 

решить мою проблему

Смежные вопросы