2017-07-17 6 views
0

J'ai un index contenant le champ titre ayant des données comme ci-dessous.Commence par un mot exact dans elasticsearch?

  1. confiture pain
  2. jamun
  3. pays jamaica

Donc, si les recherches des utilisateurs pour jam, je ne veux pas jamun et pays jamaica viennent également dans le résultat de recherche . En ce moment j'utilise la requête de préfixe dans elasticsearch, mais elle ne me donne pas le résultat que je veux.

{ 
    "query": { 
    "prefix" : { "title" : "jam" } 
    } 
} 

Répondre

0

Vous obtiendrez à la fois les résultats que la requête de préfixe fonctionne en fait une requête regexp (keyword*) sur l'indice inversé afin que les deux résultats correspondront.

vous pouvez faire quelque chose comme ce qui suit et utiliser term query au lieu de la requête de préfixe pour faire la correspondance exacte sur le mot-clé tokenized.

PUT exact_index1 
{ 
    "mappings": { 
    "document_type" : { 
     "properties": { 
     "title" : { 
      "type": "text" 
     } 
     } 
    } 
    } 
} 

POST exact_index1/document_type 
{ 
    "title" : "jamun" 
} 

POST exact_index1/_search 
{ 
    "query": { 
    "term": { 
     "title": { 
     "value": "jam" 
     } 
    } 
    } 
} 

Hope this helps

+0

Mais il va chercher aussi des données comme "confiture de fruits" également en réponse. Je veux des résultats commençant par le mot exact jam. –

+0

oui, bien dans ce cas, il s'agit d'obtenir le plus pertinent sur le dessus. "confiture de fruits" devrait correspondre à la requête à terme, mais son ordre devrait être inférieur à "confiture" ou "confiture brune". – user3775217

0

Le suggester d'achèvement fournit recherche-as-you-Type fonctionnalité

PUT - index_name/document_type/_mapping 
{ 
"document_type": { 
    "properties": { 
     "title": { 
      "type": "text" 
     }, 
     "suggest": { 
      "type": "completion", 
      "analyzer": "simple", 
      "search_analyzer": "simple" 
     } 
     } 
    } 
} 

POST - index_name/document_type 
{ 
    "name": "jamun", 
    "suggest": 
    { 
     "input": "jamun" 
    }, 
    "output": "jamun" 
} 

POST - index_name/document_type/_suggest?pretty 

{"type-suggest":{"text":"jam","completion":{"field":"suggest"}}} 
+0

Y at-il un moyen d'indexer les données dans l'ordre ci-dessous comme "Apple iPhone 6" comme "Apple", "Apple iPhone", "Apple iPhone 6" en utilisant des bardeaux ou quelque chose? –

+0

@LijoAbraham vous pouvez indexer des données dans n'importe quel ordre. La requête de recherche élastique renvoie la recherche de données que vous tapez comme [application, appli, pomme, pomme i, Apple iPhone, Apple iPhone 6] –

+0

Je n'ai besoin que de mots ngrams. pas "appl" ou "i" –