ElasticSearch& #39;s Fuzzy Query

Я новичок в ElasticSearch и в настоящее время изучаю его возможности. Один из них, который меня интересует, — это Fuzzy Query , который я тестирую, и у меня возникли проблемы с его использованием. Вероятно, это фиктивный вопрос, поэтому я думаю, что кто-то, кто уже использовал эту функцию, быстро найдет ответ, по крайней мере, я надеюсь.:)

Кстати, у меня такое ощущение, что это может быть связано не только с ElasticSearch , но, возможно, напрямую с Lucene .

Начнем с нового индекса с именем «первый индекс», в котором я храню объект «метка» со значением «американский футбол». Это запрос, который я использую.

bash-3.2$ curl -XPOST 'http://localhost:9200/firstindex/node/?pretty=true' -d '{
  "node" : {
    "label" : "american football"
  }
}
'

Вот результат, который я получаю.

{
  "ok" : true,
  "_index" : "firstindex",
  "_type" : "node",
  "_id" : "6TXNrLSESYepXPpFWjpl1A",
  "_version" : 1
}

Пока все хорошо, теперь я хочу найти эту запись, используя нечеткий запрос. Это тот, который я посылаю:

bash-3.2$ curl -XGET 'http://localhost:9200/firstindex/node/_search?pretty=true' -d '{
  "query" : {
    "fuzzy" : {
      "label" : {
        "value" : "american football",
        "boost" : 1.0,
        "min_similarity" : 0.0,
        "prefix_length" : 0
      }                       
    }    
   }   
}
'

И вот результат, который я получаю

{
  "took" : 15,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : null,
    "hits" : [ ]
  }
}

Как видите, не попал. Но теперь, когда я немного уменьшаю значение моего запроса с «американский футбол » до «американский футб » вот так :

bash-3.2$ curl -XGET 'http://localhost:9200/firstindex/node/_search?pretty=true' -d ' {
  "query" : {
    "fuzzy" : {
      "label" : {
        "value" : "american footb",
        "boost" : 1.0,
        "min_similarity" : 0.0,
        "prefix_length" : 0
      }
    }
  }
}
'

, я получаю правильное попадание в свою запись, таким образом, результат:

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.19178301,
    "hits" : [ {
      "_index" : "firstindex",
      "_type" : "node",
      "_id" : "6TXNrLSESYepXPpFWjpl1A",
      "_score" : 0.19178301, "_source" : {
        "node" : {
          "label" : "american football"
        }
      }
    } ]
  }
}

Итак, у меня есть несколько вопросов, связанных с этим тестом:

  1. Почему я не получил никакого результата при выполнении запроса со значением, полностью равным моей единственной записи "американский футбол "

  2. Это связано с тем, что у меня значение из нескольких слов -?

  3. Есть ли способ получить показатель «сходства» в результатах моего запроса, чтобы я мог лучше понять, как найти правильный порог для моих нечетких запросов

  4. Существует страница, посвященная Нечеткому запросу на веб-сайте ElasticSearch, но я не уверен, что там перечислены все возможные параметры, которые я могу использовать для нечеткого запроса. Где я мог найти такой исчерпывающий список?

  5. Тот же вопрос по другим запросам.

  6. Есть ли разница между Fuzzy Query и Query String Query с использованием синтаксиса lucene для получения нечеткого соответствия?

21
задан Brian Webster 28 January 2013 в 22:12
поделиться