-1

j'ai un ensemble de données comme ci-dessousLes correspondances exactes avec requête de match sur le terrain analysé ne pas montrer sur

"hits": [ 
     { 
      "_index": "demotest", 
      "_type": "demotest", 
      "_id": "2", 
      "_score": 1, 
      "_source": { 
       "name": "Duvvuri ram gopal reddy" 
      } 
     }, 
     { 
      "_index": "demotest", 
      "_type": "demotest", 
      "_id": "1", 
      "_score": 1, 
      "_source": { 
       "name": "ram gopal reddy" 
      } 
     }, 
     { 
      "_index": "demotest", 
      "_type": "demotest", 
      "_id": "3", 
      "_score": 1, 
      "_source": { 
       "name": "reddy ram gopal" 
      } 
     } 
     ] 

Quand je tente d'exécuter une requête de correspondance avec valeur ram gopal reddy enregistrement exacte correspondance ne montre pas sur le dessus. Requête:

GET demotest/_search 
{ 
    "explain": true, 
    "query": { 
     "match": { 
      "name": "ram gopal reddy" 
     } 
    } 
} 

Résultat après l'exécution de la requête ci-dessus:

"hits": [ 
     { 
      "_index": "demotest", 
      "_type": "demotest", 
      "_id": "2", 
      "_score": 0.8630463, 
      "_source": { 
       "name": "Duvvuri ram gopal reddy" 
      } 
     }, 
     { 
      "_index": "demotest", 
      "_type": "demotest", 
      "_id": "1", 
      "_score": 0.7594807, 
      "_source": { 
       "name": "ram gopal reddy" 
      } 
     }, 
     { 
      "_index": "demotest", 
      "_type": "demotest", 
      "_id": "3", 
      "_score": 0.7594807, 
      "_source": { 
       "name": "reddy ram gopal" 
      } 
     } 
     ] 

Comment obtenir enregistrement exact égalés sur dans les résultats de recherche. En outre, j'ai posté mon test complet here et je veux la recherche insensible à la casse et non la recherche par phrase. Merci

+0

Quelle version ElasticSearch est-ce? –

+0

J'utilise élastique version 5.1.2 –

+0

Etrange, même si les 3 mots "reddy ram gopal" sont dans tous les documents (je veux dire avec un score faible selon TF/IDF), un champ plus court devrait avoir un meilleur score qu'un long champ (selon TF/IDF doc ici https://www.elastic.co/guide/en/elasticsearch/guide/current/scoring-theory.html), pouvez-vous poster des détails '' _explain'' s'il vous plaît? –

Répondre

0

J'utiliserais une requête bool avec plusieurs clauses should. Un serait défini avec une requête de phrase et l'autre comme une requête de correspondance.

J'ai écrit un plein (mais par exemple complexe) ici: https://gist.github.com/dadoonet/5179ee72ecbf08f12f53d4bda1b76bab

devrait donner quelque chose comme:

GET oss/_search 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match_phrase": { 
      "name": { 
       "query" : "ram gopal reddy", 
       "boost": 8.0 
      } 
      } 
     }, 
     { 
      "match": { 
      "name": { 
       "query": "ram gopal reddy" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
+0

Je n'ai pas obtenu le résultat souhaité avec la réponse ci-dessus. J'ai posté mon test complet [ici] (https://gist.github.com/shashankgutha/0b75774d273091590dd0765ee63276af) et je veux la recherche insensible à la casse et non la recherche d'expression. –