Chcę wykonać zarówno dopasowanie ścisłe, jak i częściowe dopasowanie słowa/podłańcucha. Na przykład, jeśli szukam "golarki męskiej", powinienem znaleźć w tej sytuacji "golarkę męska". Ale na wszelki wypadek szukam "golarki en" i wtedy powinienem znaleźć "golarkę męska" w wyniku. I stosując następujące ustawienia i mapowania:Elasticsearch: Znajdź podłańcuch dopasowania
Ustawienia indeksu:
PUT /my_index
{
"settings": {
"number_of_shards": 1,
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
}
}
mapowania:
PUT /my_index/my_type/_mapping
{
"my_type": {
"properties": {
"name": {
"type": "string",
"index_analyzer": "autocomplete",
"search_analyzer": "standard"
}
}
}
}
Rejestry Wkładka:
POST /my_index/my_type/_bulk
{ "index": { "_id": 1 }}
{ "name": "men's shaver" }
{ "index": { "_id": 2 }}
{ "name": "women's shaver" }
Zapytanie:
1. Aby wyszukać według dokładnego dopasowania do wyrażenia -> "męska"
POST /my_index/my_type/_search
{
"query": {
"match": {
"name": "men's"
}
}
}
Powyższe zapytanie zwróci "golarki męskie" w wyniku zwrotnego.
2. Aby wyszukać według częściowe słowo meczu -> "pl w"
POST /my_index/my_type/_search
{
"query": {
"match": {
"name": "en's"
}
}
}
Powyższe zapytanie niczego nie powrócić.
Próbowałem również następujące zapytania
POST /my_index/my_type/_search
{
"query": {
"wildcard": {
"name": {
"value": "%en's%"
}
}
}
}
wciąż nie wszystko. Uznałem, że jest to spowodowane filtrem typu "edge_ngram" w indeksie, który nie może znaleźć "częściowego dopasowania słowa/sbustringu". Próbowałem również filtr typu "n-gram", ale spowalnia wyszukiwanie.
Proszę zasugerować, jak osiągnąć dopasowanie zarówno do wyrażenia, jak i do częściowego dopasowania fraz przy użyciu tego samego ustawienia indeksu.
Dzięki. Mogę szukać teraz. –
@BlackPOP - Wielkie dzięki ... Uratowałeś mnie ... – hemu
Wystarczy zacytować dokumentację ElasticSearch: "Ostrzeżenie: zezwolenie na użycie wieloznacznika na początku słowa (np." * Ing ") jest szczególnie ciężkie, ponieważ wszystkie terminy w indeks musi być zbadany " http://www.elastic.co/guide/en/elasticsearch/reference/1.x/query-dsl-query-string-query.html#_wildcards –