我一直在阅读ElasticSearch
,但找不到如何执行以下操作的答案:
说,你有一些记录,标题中有“学习”,用户使用“学习”一词而不是“学习”。您如何设置ElasticSearch
以匹配此内容?
谢谢, 亚历
ps:对不起,如果这是重复的话。不知道该搜索什么!
答案 0 :(得分:3)
您可能对此感兴趣:http://www.elasticsearch.org/guide/reference/query-dsl/flt-query/
例如:我已将书名标记为索引并在此查询中:
{
"query": {
"bool": {
"must": [
{
"fuzzy": {
"book": {
"value": "ringing",
"min_similarity": "0.3"
}
}
}
]
}
}
}
我得到了
{
"took" : "1",
"timed_out" : "false",
"_shards" : {
"total" : "5",
"successful" : "5",
"failed" : "0"
}
"hits" : {
"total" : "1",
"max_score" : "0.19178301",
"hits" : [
{
"_index" : "library",
"_type" : "book",
"_id" : "3",
"_score" : "0.19178301",
"_source" : {
"book" : "The Lord of the Rings",
"author" : "J R R Tolkein"
}
}
]
}
}
这是唯一正确的结果..
答案 1 :(得分:2)
您可以将词干应用于您的文档,这样当您对studying
编制索引时,您就会将study
编入索引。当您查询时也会这样做,以便当您再次搜索studying
时,您将搜索study
并找到匹配项,同时查找study
和studying
。
词干当然取决于语言,并且有不同的技巧,因为英语snowball很好。当您索引数据时,您会丢失一些信息,因为您可以看到您无法真正区分学习和学习。如果要保持这种区别,可以使用multi_field以不同方式为同一文本编制索引,并对其应用不同的文本分析。这样你可以搜索多个字段,包括非词干版本和词干版本,可能会给它们赋予不同的权重。