我有一个要求,能够搜索一个完整的句子或前缀。我使用的ui库(React式搜索)以以下方式生成查询:
"simple_query_string": {
"query": "\"Louis George Maurice Adolphe\"",
"fields": [
"field1",
"field2",
"field3"
],
"default_operator": "or"
}
我希望它能为例如返回结果。 Louis George Maurice Adolphe (Roche)
但不仅仅是包含部分项的记录,比如 Louis
或者 George
目前,我有这样的代码,但它只带来了记录,如果我用完整的词搜索 Louis George Maurice Adolphe (Roche)
但不是前缀 Louis George Maurice Adolphe
.
{
"settings": {
"analysis": {
"char_filter": {
"space_remover": {
"type": "mapping",
"mappings": [
"\\u0020=>"
]
}
},
"normalizer": {
"lower_case_normalizer": {
"type": "custom",
"char_filter": [
"space_remover"
],
"filter": [
"lowercase"
]
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"field3": {
"type": "keyword",
"normalizer": "lower_case_normalizer"
}
}
}
}
}
如有任何上述指导,我们将不胜感激。谢谢。
2条答案
按热度按时间von4xj4u1#
潜在的问题源于您正在应用一个空格移除器。这实际上意味着,当您摄取文档时:
它们被索引为
所以如果你想用
simple_string
,您可能需要重新考虑规格化器。@当你搜索时,忍者的答案失败了
George Maurice Adolphe
,即没有前缀交叉。3okqufwl2#
您没有使用前缀查询,因此没有得到前缀搜索项的结果,我使用了相同的Map和示例文档,但更改了搜索查询,从而得到预期的结果
索引Map
索引样本文档
搜索查询
搜索结果