2016-05-17 1 views
1

J'essaie de trouver un moyen d'indexer un document avec une description comme "In-N-Out Burger" et faire une recherche comme "in n out" ou "in and out" ou juste directement "in-n-out" et demandez-lui de retourner le document "In-N-Out Burger". En regardant à travers les documents, je suis confus sur la façon de gérer un tiret lors de l'indexation ou de la recherche. Aucune suggestion?Elasticsearch phrase de recherche floue avec dash

Mon réglage actuel et la cartographie:

curl -XPUT http://localhost:9200/objects -d '{ 
    "settings": { 
     "analysis": { 
      "analyzer": { 
       "lower": { 
        "type": "custom", 
        "tokenizer": "keyword", 
        "filter": [ "lowercase" ] 
       } 
      } 
     } 
    } 
}' 

curl -XPUT http://localhost:9200/objects/object/_mapping -d '{ 
    "object" : { 
     "properties" : { 
      "objectDescription" : { 
       "type" : "string", 
       "fields" : { 
        "lower": { 
         "type": "string", 
         "analyzer": "lower" 
        } 
       } 
      }, 
      "suggest" : { 
       "type" : "completion", 
       "analyzer" : "simple", 
       "search_analyzer" : "simple", 
       "payloads" : true 
      } 
     } 
    } 
}' 
+0

Une chance avec ma réponse? –

+0

Je suis tellement désolé! Je suis à l'étranger et je ne peux pas jouer avec. Dès que je rentre à la maison je vous le ferai savoir :) –

Répondre

1

Je n'ai pas vu de problèmes quand je fait index avec vos paramètres et mettre document:

curl -XPUT http://localhost:9200/objects/object/001 -d '{ 
    "description": "In-N-Out Burger", 
    "name" : "first_document" 
}' 

Et puis essayé de le trouver:

curl -XGET 'localhost:9200/objects/object/_search?q=in+and+out&pretty' 
{ 
    "took" : 6, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 1, 
    "max_score" : 0.05038611, 
    "hits" : [ { 
     "_index" : "objects", 
     "_type" : "object", 
     "_id" : "001", 
     "_score" : 0.05038611, 
     "_source" : { 
     "description" : "In-N-Out Burger", 
     "name" : "first_document" 
     } 
    } ] 
    } 
} 

ou

curl -XGET 'localhost:9200/objects/object/_search?pretty&q=in-n-out' 
{ 
    "took" : 8, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 1, 
    "max_score" : 0.23252454, 
    "hits" : [ { 
     "_index" : "objects", 
     "_type" : "object", 
     "_id" : "001", 
     "_score" : 0.23252454, 
     "_source" : { 
     "description" : "In-N-Out Burger", 
     "name" : "first_document" 
     } 
    } ] 
    } 
} 

Comme vous pouvez le voir, il peut être trouvé. Analyzer utilise '-' comme délimiteur et divise la phrase sur les jetons lorsque vous indexez un document et lorsque vous essayez de le trouver. Vous pouvez voir ce travail:

curl -XGET 'localhost:9200/objects/_analyze?pretty=true' -d 'In-N-Out Burger' 
{ 
    "tokens" : [ { 
    "token" : "in", 
    "start_offset" : 0, 
    "end_offset" : 2, 
    "type" : "<ALPHANUM>", 
    "position" : 0 
    }, { 
    "token" : "n", 
    "start_offset" : 3, 
    "end_offset" : 4, 
    "type" : "<ALPHANUM>", 
    "position" : 1 
    }, { 
    "token" : "out", 
    "start_offset" : 5, 
    "end_offset" : 8, 
    "type" : "<ALPHANUM>", 
    "position" : 2 
    }, { 
    "token" : "burger", 
    "start_offset" : 9, 
    "end_offset" : 15, 
    "type" : "<ALPHANUM>", 
    "position" : 3 
    } ] 
} 
+0

Ouais, vous avez raison. Merci! –