我一直在阅读,ElasticSearch
但找不到有关如何执行以下操作的答案:
假设您有一些标题中包含“study”的记录,并且用户使用“study”一词而不是“study”。你会如何设置ElasticSearch
来匹配这个?
谢谢,亚历克斯
ps:对不起,如果这是重复的。不知道要搜索什么!
我一直在阅读,ElasticSearch
但找不到有关如何执行以下操作的答案:
假设您有一些标题中包含“study”的记录,并且用户使用“study”一词而不是“study”。你会如何设置ElasticSearch
来匹配这个?
谢谢,亚历克斯
ps:对不起,如果这是重复的。不知道要搜索什么!
您可能对此感兴趣: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"
}
}
]
}
}
这是唯一正确的结果..
您可以将词干应用于您的文档,这样当您索引时studying
,您就处于索引之下study
。当您查询时,您会执行相同的操作,因此当您studying
再次搜索时,您将搜索study
并且您会找到匹配项,都在寻找study
和studying
。
词干当然取决于语言,并且有不同的技术,对于英语滚雪球就可以了。发生的情况是,在索引数据时会丢失一些信息,因为如您所见,您无法真正区分学习和学习。如果您想保持这种区别,您可以使用multi_field以不同方式索引相同的文本并对其应用不同的文本分析。这样,您可以搜索多个字段,包括非词干版本和词干版本,可能会赋予它们不同的权重。