Я хочу, чтобы ElasticSearch (точнее, камень Tire) возвращал результат в зависимости от того, сколько раз ключевое слово появляется в полях. Например, я индексирую поле title в модели с именем Article. У меня есть два объекта, первый объект имеет значение title 'Забавная забавная тема', а второй объект имеет значение заголовка 'Смешная тема' . Я хочу индексировать таким образом, чтобы при поиске по ключевому слову "Смешной" первым возвращался первый объект, так как в его заголовке есть два слова "Смешной". Можно ли это сделать через шину? Как называется метод индексации?
Оценка ElasticSearch (жемчужина шин)
Ответы (1)
Здесь рабочий образец, ключевым фактором здесь является значение повышения, которое должно быть достаточно высоким, и вы не можете использовать подстановочные диаграммы в запросе.
require 'tire'
require 'yajl/json_gem'
articles = [
{ :id => '0', :type => 'article', :title => 'nothing funny'},
{ :id => '1', :type => 'article', :title => 'funny'},
{ :id => '2', :type => 'article', :title => 'funny funny funny'}
]
Tire.index 'articles' do
import articles
end
Tire.index 'articles' do
delete
create :mappings => {
:article => {
:properties => {
:id => { :type => 'string', :index => 'not_analyzed', :include_in_all => false },
:title => { :type => 'string', :boost => 50.0, :analyzer => 'snowball' },
:tags => { :type => 'string', :analyzer => 'keyword' },
:content => { :type => 'string', :analyzer => 'snowball' }
}
}
}
import articles do |documents|
documents.map { |document| document.update(:title => document[:title].downcase) }
end
refresh
end
s = Tire.search('articles') do
query do
string "title:funny"
end
end
s.results.each do |document|
puts "* id:#{ document.id } #{ document.title } score: #{document._score}"
end
дает
* id:2 funny funny funny score: 14.881571
* id:1 funny score: 14.728935
* id:0 nothing funny score: 9.81929
person
peter
schedule
30.08.2012
Не могли бы вы рассказать немного подробнее, как бы вы достигли этой цели? Увеличение поля заголовка?
- person javanna; 30.08.2012
см. elasticsearch.org/guide/reference/mapping/boost-field.html для значения повышения, в основном оно определяет результирующий балл по сравнению с результатом других полей/тегов и т. д., чем выше число попаданий * уровень повышения, тем больше вероятность того, что это попадание поднимется в рейтинге индекса
- person peter; 30.08.2012
К сожалению, это не работает для меня, Питер. Я добавил высокое значение для поля, похожего на заголовок, но оно не сортируется правильно, как предполагалось.
- person RubyFanatic; 30.08.2012
Вы можете опубликовать свои данные, чтобы мы могли проверить?
- person peter; 31.08.2012