我有一个产品目录,正在使用Elastica客户端在ElasticSearch中建立索引。我是ElasticSearch BTW的新手。
我的目录中有't-shirt'
一些名称相同的产品。但是,如果输入,它们将不会出现在搜索结果中'tshirt'
。
我该怎么办't-shirt'
才能弹出结果?
我已经按照本教程进行了学习,并为索引实现了以下内容:
'analysis' => array(
'analyzer' => array(
'indexAnalyzer' => array(
'type' => 'custom',
'tokenizer' => 'whitespace',
'filter' => array('lowercase', 'mySnowball')
),
'searchAnalyzer' => array(
'type' => 'custom',
'tokenizer' => 'whitespace',
'filter' => array('lowercase', 'mySnowball')
)
),
'filter' => array(
'mySnowball' => array(
'type' => 'snowball',
'language' => 'English'
)
)
)
您可以尝试使用映射字符过滤器删除连字符:
http://www.elasticsearch.org/guide/zh-
CN/elasticsearch/reference/current/analysis-mapping-
charfilter.html
像这样会删除连字符:
{
"index" : {
"analysis" : {
"char_filter" : {
"my_mapping" : {
"type" : "mapping",
"mappings" : ["-=>"]
}
},
"analyzer" : {
"custom_with_char_filter" : {
"tokenizer" : "standard",
"char_filter" : ["my_mapping"]
}
}
}
}
}
这是一种钝器,因为它会去除所有的连字符,但应使“ T恤”和“ T恤”匹配
我遵循了本教程,并为索引实现了以下内容:
问题内容: 弹性搜寻1.6 我想索引包含连字符的文本,例如U-12,U-17,WU-12,T恤…,并能够使用“简单查询字符串”查询来搜索它们。 数据样本(简体): 所以我去了这个映射: 使用以下查询进行搜索: 什么有效: “ U-12”,“ U ”,“ t ”,“ ts *” 什么不起作用: “ U-”,“ u-1 ”,“ t-”,“ t-sh ”,… 看来char过滤器未在搜索字符串上执行?我该
问题内容: 我有一个很大的名字数据库,主要来自苏格兰。我们目前正在生产一个原型,以替换执行搜索的现有软件。这仍在生产中,我们的目标是使我们的结果尽可能接近同一搜索的当前结果。 我希望有人可以帮助我,我正在对Elastic Search进行搜索,查询是“ Michael Heaney”,我得到了一些疯狂的结果。当前搜索返回两个主要的姓,分别是“ Heaney”和“ Heavey”,都以“ Micha
问题内容: 我想寻求帮助。我想在标题和内容中搜索一个单词。这是结构 查询字符串看起来像这样,在这里我想在“ 15-game”之类的文本中搜索“ 15-g”: 如果我重复这个问题,请接受我的道歉,但我无法查明发生了什么,以及为什么它不返回任何结果。 但是我无法与我合作。 真正有趣的是,如果我搜索“ 15-g”(15个 空格 - 空格 g),它将返回结果。 提前非常感谢您! 问题答案: 也向您添加一个
我想请你帮忙。我想搜索一个词里面的标题和内容。下面是结构 查询字符串如下所示,我希望在类似“15-game”的文本中搜索“15-g”: 请接受我的道歉,如果我重复的问题,但我无法找到发生了什么,为什么它没有返回任何结果。 我已经看过了: 提前谢谢你!
由于已经有很多关于连字符的问题,我已经尝试了以下解决方案: 使用字符筛选器:ElasticSearch-在名称中使用连字符进行搜索。 所以我做了这个映射: 所以char筛选器似乎没有在搜索字符串上执行?我该怎么做才能让它起作用?