Elasticsearch 空格分隔名称以外的单词
Elasticsearch spaces to seperate words except for names
我们正在构建一个带有 elasticsearch 的搜索机,供我们公司的实习生使用。
我们正在使用一个输入框,用户可以在其中输入他们的搜索词(Google 喜欢)。
所以应该可以搜索一种由空格分隔的不同类型的词。
一切正常,但我们在命名方面遇到了一些问题……
如果我们搜索“Tim Van De Velde”,没有“Tim vandevelde”的结果,这应该是可能的。
请记住,我们希望在单词之间保留空格以使用我们的和运算符,并且我们不希望出现许多不正确的结果。
关于我们如何使这成为可能的任何想法或想法?
看看我们的查询:
"filtered": {
"query": {
"bool": {
"should": [
{
"multi_match": {
"type": "most_fields",
"query": "Tim Van De Velde",
"operator": "and",
"boost": 1,
"fields": [
"fullname",
"alias",
"name"
]
}
} ,
{
"multi_match": {
"type": "most_fields",
"query": "Tim Van De Velde",
"operator": "and",
"fields": [
"fullname",
"alias",
"name"
],
"boost": 0.8,
"fuzziness": 1
}
}
您正在寻找的可能是一种用于化合物名称的分解分析器,就像您提到的那样。另一种方法是使用 ngrams
分析器,它将在您的名字上滑动 window 个 n 字符。这种方法给你一个很好的召回率,但不知何故精度较差。所以我会先尝试使用分解分析仪,然后 ngrams
。
以下插件可以处理复合词:Analysis Decompound. It works without a dictionary. For a dictionary based approach use the Compound Word Token Filter
使用插件 1 时,您提到的名称将被拆分为以下标记:
{
"tokens": [
{
"token": "tim",
},
{
"token": "vandeveld",
},
{
"token": "vand",
},
{
"token": "veld",
}
]
}
有一种简单的方法可以实现您的目标:查询预处理。
- 字典人名
- 接收输入为“Tim Van De Velde”和return输出为["Tim Van De Velde"或"TimVan De Velde"或"Tim VanDe Velde"或"Tim Van DeVelde"或"TimVanDe Velde" 或 "TimVan DeVelde" 或 "TimVanDeVelde" 或 "Tim Van DeVelde" 或 "Tim VanDeVelde" 或 "TimVanDeVelde" ]
我们正在构建一个带有 elasticsearch 的搜索机,供我们公司的实习生使用。 我们正在使用一个输入框,用户可以在其中输入他们的搜索词(Google 喜欢)。 所以应该可以搜索一种由空格分隔的不同类型的词。
一切正常,但我们在命名方面遇到了一些问题…… 如果我们搜索“Tim Van De Velde”,没有“Tim vandevelde”的结果,这应该是可能的。 请记住,我们希望在单词之间保留空格以使用我们的和运算符,并且我们不希望出现许多不正确的结果。
关于我们如何使这成为可能的任何想法或想法?
看看我们的查询:
"filtered": {
"query": {
"bool": {
"should": [
{
"multi_match": {
"type": "most_fields",
"query": "Tim Van De Velde",
"operator": "and",
"boost": 1,
"fields": [
"fullname",
"alias",
"name"
]
}
} ,
{
"multi_match": {
"type": "most_fields",
"query": "Tim Van De Velde",
"operator": "and",
"fields": [
"fullname",
"alias",
"name"
],
"boost": 0.8,
"fuzziness": 1
}
}
您正在寻找的可能是一种用于化合物名称的分解分析器,就像您提到的那样。另一种方法是使用 ngrams
分析器,它将在您的名字上滑动 window 个 n 字符。这种方法给你一个很好的召回率,但不知何故精度较差。所以我会先尝试使用分解分析仪,然后 ngrams
。
以下插件可以处理复合词:Analysis Decompound. It works without a dictionary. For a dictionary based approach use the Compound Word Token Filter
使用插件 1 时,您提到的名称将被拆分为以下标记:
{
"tokens": [
{
"token": "tim",
},
{
"token": "vandeveld",
},
{
"token": "vand",
},
{
"token": "veld",
}
]
}
有一种简单的方法可以实现您的目标:查询预处理。
- 字典人名
- 接收输入为“Tim Van De Velde”和return输出为["Tim Van De Velde"或"TimVan De Velde"或"Tim VanDe Velde"或"Tim Van DeVelde"或"TimVanDe Velde" 或 "TimVan DeVelde" 或 "TimVanDeVelde" 或 "Tim Van DeVelde" 或 "Tim VanDeVelde" 或 "TimVanDeVelde" ]