2015-12-18 1 views
3

Я пытаюсь выделить документ на основе запроса span_near в Elasticsearch 2.1.1, а ES неправильно выделяет термин, который на самом деле не является хитом, потому что он находится за пределами рассматриваемого диапазона.Как вы выделяете запросы span_near в Elasticsearch?

шаги я исполняющие являются:

Создать индекс

curl -XPUT 'http://localhost:9200/twitter/' -d '{ 
    "mappings": { 
     "tweet": { 
      "properties": { 
       "message": { 
        "type": "string", 
        "term_vector": "with_positions_offsets", 
        "store": true 
       } 
      } 
     } 
    } 
}' 

Index документ

curl -XPUT 'localhost:9200/twitter/tweet/1?refresh=true' -d '{ 
    "message" : "A new bonsai tree in the office. Bonsai!" 
}' 

Поиск

curl -XGET 'http://localhost:9200/twitter/tweet/_search?pretty' -d '{ 
    "query" : { 
     "span_near" : { 
      "clauses" : [ 
       {"span_term": {"message": "new"}}, 
       {"span_term": {"message": "bonsai"}} 
      ], 
      "slop": 1, 
      "in_order": false 
     } 
    }, 
    "highlight": {"fields": {"message": {"type": "plain"}}} 
}' 

поиска выше возвращается:

{ 
    "took" : 7, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 1, 
    "max_score" : 0.13561106, 
    "hits" : [ { 
     "_index" : "twitter", 
     "_type" : "tweet", 
     "_id" : "1", 
     "_score" : 0.13561106, 
     "_source":{"message" : "A new bonsai tree in the office. Bonsai!"}, 
     "highlight" : { 
     "message" : [ "A <em>new</em> <em>bonsai</em> tree in the office. <em>Bonsai</em>!" ] 
     } 
    } ] 
    } 
} 

Как вы можете видеть, это неправильно выделяя появление «Бонсай» в конце поля, которое не находится в пределах 1 слово «новый». Несколько вещей, чтобы отметить:

  1. Это точно такой же набор шагов производит правильные освещающие результаты против Elasticsearch 1.5.2.
  2. Существует открытая ошибка для span_near запросов не работает с использованием быстрого векторно Highlighter (FVH) - https://github.com/elastic/elasticsearch/issues/5496 - вот почему я пытаюсь использовать plain фломастер выше

Есть ли что-то я m, чтобы получить подсветку для работы с span_near запросами?

+1

Ваш запрос отлично работает на '2.0 2.0, я не могу найти какой-либо документ, который говорит что-то, что было изменено в' highlighting' от 2.0 до 2.1 – ChintanShah25

+0

@ ChintanShah25 Я также подтвердил, что подсветка корректно работает на ES 2.0.2. Похоже, что это должно быть ошибка маркера в 2.1 ... – dposada

+0

Я ничего не мог найти в [break changes] (https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-2.1 .html), не могли бы вы сделать снимок [выделить запрос] (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-highlighting.html#_highlight_query), я имею в виду копию ваш запрос, чтобы выделить запрос и посмотреть, работает ли он? – ChintanShah25

ответ

3

Оказывается, что это известная ошибка в ES v2.1.1, и фиксируется этим запросом тяговой:

https://github.com/elastic/elasticsearch/pull/15516.

В соответствии с ярлыками на этом PR это исправление ошибки будет частью v2.1.2.

1

Я вернулся и немного поиграл с тестовой средой, и, как я думаю, вы не понимаете, что делает запрос span_near. Я использую Sense, чтобы сделать это так синтаксически, что это может выглядеть немного иначе, но вы должны уметь следовать и воспроизводить это.

я первый прошел и создал индекс с отображениями

PUT /testindex 
{ 
    "mappings": { 
     "post": { 
     "properties": { 
      "message": { 
       "type": "string", 
       "store": true, 
       "analyzer": "english", 
       "fields": { 
        "raw": { 
        "type": "string", 
        "index": "not_analyzed" 
        } 
       } 
      } 
     } 
     } 

Я опущенных ваше одно свойство для term_vector это никак не повлияло на мое испытание, и я понял, что это было некоторое наследство имущество, оставшиеся от вы пытаетесь к вектор подсветкой.

Затем я обновил индекс с некоторыми данными

PUT /testindex/post/1 
{ 
    "message": "Bonsai new. A new bonsai tree in the office. Bonsai!" 
} 

И затем выполняется запрос, который дал мне те же результаты (не опубликуем, что, как это так же, как указано выше).

Где я думаю, что путаница вступает в размывание того, что делает highligher против span_near. Запрос ищет термины new и bonsai с откидкой одного, который работает. Чтобы проверить это, добавьте следующие записи:

PUT /testindex/post/2 
{ 
    "message": "Bonsai blah blah new blah blah bonsai tree in the office Bonsai!" 
} 

Запуск запроса не возвращает результат как расстояние от нового к бонсаи теперь больше, чем один. При смене шлема на что-то вроде 5 или 6 вы получите возвращаемые вами матчи.

Это работает независимо от подсветки. Выделение рассматривает термины, не зависящие от запроса диапазона, но если этот термин находится в возвращаемом ответе, выделение будет применено к терминам (терминам), к которым мы это видим. Выделение определенно прошло через некоторые изменения в версии 2.0+, поскольку у нас была некоторая перезапись, когда мы переходим к движку 2.0.

Основываясь на изменениях, которые я видел, теперь выделение теперь работает независимо от запроса, как если бы оно применялось к событию ответного сообщения. Возможно, я ошибаюсь, но похоже, что он работает точно так, как ожидалось. Вы видите Бонсай, потому что это одно из условий поиска. Выделение не является факторингом в параметре slop или span_near только в том, что в результате существуют два закодированных выражения.

Мы читаем запись, введенную вами в качестве предложения, однако ES накладывает знаки пунктуации и смотрит на пробел. Индексирование и поиск того, что вы ввели, приводит к совпадению, потому что в течение одного интервала между двумя членами есть два члена. Затем выделение затем применяется к результату, основанному на условиях поиска не близости, в которую они падают друг от друга.

0

Я испытал нечто очень похожее и сделал сравнение между ES 1.7 и 2.3 и написал его на досках объявлений ES. Это сейчас проблема github, если кто-то хочет отслеживать: https://github.com/elastic/elasticsearch/issues/18035

+0

Тема, в которой ваша ссылка пункты были отмечены как дубликаты. – Matsmath

 Смежные вопросы

  • Нет связанных вопросов^_^