elasticsearch 信息检索-如何处理单分词的搜索查询';被分割成多个标记
我只是一个信息检索的初学者 我希望解决一个问题,即用户在键入一个单词时错误地在字符之间添加空格或将两个单词合并为一个单词,但由于简单的反向索引查找,目前无法处理该问题 假设我对以下文件进行了反向索引:
elasticsearch 信息检索-如何处理单分词的搜索查询';被分割成多个标记,
elasticsearch,search,lucene,information-retrieval,
elasticsearch,Search,Lucene,Information Retrieval,我只是一个信息检索的初学者 我希望解决一个问题,即用户在键入一个单词时错误地在字符之间添加空格或将两个单词合并为一个单词,但由于简单的反向索引查找,目前无法处理该问题 假设我对以下文件进行了反向索引: 杰克和吉尔是好朋友 杰克去了阿拉斯加 吉尔住在纽约 现在,使用反向索引意味着将纽约和纽约作为单独的标记进行索引(假设只是一个示例,并且没有使用NLP将纽约标记为位置) 现在查询杰克,我将得到位置1,2,这很好 但是对于查询newyork(假设查询没有空格),如何从包含位置3(组合)的索引中获取ne
类似地,对于queryala ska(用空格分隔单词))也许类似的方法对您适用:
使用自定义分析器(ngramtokenizer)创建索引 让我们发布新文档
POST index/doc
{
"token": "alaska",
"location":[4]
}
POST index/doc
{
"token": "york",
"location":[3]
}
POST index/doc
{
"token": "new",
"location":[3]
}
POST index/doc
{
"token": "jack",
"location":[1,2]
}
POST index/doc
{
"token": "jill",
"location":[1,2]
}
搜索:
GET index/_search
{
"query": {
"match": {
"token": "ala ska"
}
}
}
结果:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.9346048,
"hits": [
{
"_index": "index",
"_type": "doc",
"_id": "z7hBMG4BXy8wPzqAcq-C",
"_score": 1.9346048,
"_source": {
"token": "alaska",
"location": [
4
]
}
}
]
}
}
嗨,谢谢你的回答!。但是你知道算法是如何工作的吗?或者你知道任何文档。感谢您解释ngram的工作原理。如果要实现自动完成搜索,也可以使用它。
GET index/_search
{
"query": {
"match": {
"token": "ala ska"
}
}
}
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.9346048,
"hits": [
{
"_index": "index",
"_type": "doc",
"_id": "z7hBMG4BXy8wPzqAcq-C",
"_score": 1.9346048,
"_source": {
"token": "alaska",
"location": [
4
]
}
}
]
}
}