elasticsearch 允许在elasticsearch中标记基于hypen的单词
我有一个字段
elasticsearch 允许在elasticsearch中标记基于hypen的单词,
elasticsearch,lucene,full-text-search,
elasticsearch,Lucene,Full Text Search,我有一个字段name的以下映射,该字段将保存电子商务的产品名称 'properties': { 'name': { 'type': 'text', 'analyzer': 'standard', 'fields': { 'english': { 'type': 'text', 'analyzer': 'english
name
的以下映射,该字段将保存电子商务的产品名称
'properties': {
'name': {
'type': 'text',
'analyzer': 'standard',
'fields': {
'english': {
'type': 'text',
'analyzer': 'english'
},
}
},
假设我有以下要索引/搜索的字符串
一包三件T恤
这两个分析程序分别生成术语[t,shirt]、[t,shirt]
这给了我一个问题:当用户键入“男士T恤”时,无法得到任何结果
我怎样才能在倒排索引中得到这个词,比如[t,shirts,shirt,tshirt',tshirts]
我试图调查词干分析器的排除情况,但找不到任何处理连字符的方法。如果找到更通用的解决方案,而不是手动进行排除,我也会很有帮助。因为可能有很多我现在不知道的可能性,例如
电子邮件,电子邮件空白标记器可以完成这项工作
将产生
[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog's, bone. ]
我找到了一个解决方案,我想它可以帮助我达到预期的结果。然而,我仍然想看看是否有一些好的和推荐的方法来解决这个问题
基本上,我将使用多个字段来解决这个问题,其中第一个分析器是标准的,第二个是我的自定义分析器
根据Elasticsearch文档,chars\u过滤器
发生在标记器
之前。因此,我们的想法是删除带有空字符的-
,这将使t-shirt
变成tshirt
。因此,标记器将在反向索引中将整个术语标记为tshirts
GET _analyze
{
"tokenizer": "standard",
"filter": [
"lowercase",
{"type": "stop", "stopwords": "_english_"}
],
"char_filter" : [
"html_strip",
{"type": "mapping", "mappings": ["- => "]}
],
"text": "these are t-shirts <table>"
}
GET\u分析
{
“标记器”:“标准”,
“过滤器”:[
“小写”,
{“type”:“stop”,“stopwords”:“\u english”}
],
“字符过滤器”:[
“html_strip”,
{“类型”:“映射”,“映射”:[“-=>”]}
],
“文本”:“这些是t恤”
}
将提供以下代币
{
"tokens": [
{
"token": "tshirts",
"start_offset": 10,
"end_offset": 18,
"type": "<ALPHANUM>",
"position": 2
}
]
}
{
“代币”:[
{
“令牌”:“T恤”,
“起始偏移量”:10,
“端部偏移”:18,
“类型”:“,
“职位”:2
}
]
}
虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-谢谢你的注意。修正了。嗨,当人们搜索t恤时,这可以帮助我。我更想要的是tShirt
,因此在您的示例中,需要的术语是[brownfoxes]
{
"tokens": [
{
"token": "tshirts",
"start_offset": 10,
"end_offset": 18,
"type": "<ALPHANUM>",
"position": 2
}
]
}