我正在尝试让用户提交的查询“Joe Frankles”,“Joe Frankle”,“Joe Frankle's”以匹配原始文本“Joe Frankle's”。现在我们正在索引这个文本所在的字段(轮胎/ Ruby格式):
{ :type => 'string', :analyzer => 'snowball' }
并搜索:
query { string downcased_query, :default_operator => 'AND' }
我尝试了这个失败:
create :settings => {
:analysis => {
:char_filter => {
:remove_accents => {
:type => "mapping",
:mappings => ["`=>", "'=>"]
}
},
:analyzer => {
:myanalyzer => {
:type => 'custom',
:tokenizer => 'standard',
:char_filter => ['remove_accents'],
:filter => ['standard', 'lowercase', 'stop', 'snowball', 'ngram']
}
},
:default => {
:type => 'myanalyzer'
}
}
},
答案 0 :(得分:3)
有两种处理占有撇号的官方方式:
1)使用" possessive_english" ES文档中描述的词干分析器: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-stemmer-tokenfilter.html
示例:
{
"index" : {
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"tokenizer" : "standard",
"filter" : ["standard", "lowercase", "my_stemmer"]
}
},
"filter" : {
"my_stemmer" : {
"type" : "stemmer",
"name" : "possessive_english"
}
}
}
}
}
除了'#34; possessive_english"之外,还可以使用其他限制器或雪球。过滤,如果你喜欢。应该/必须工作,但它是未经测试的代码。
2)使用" word_delimiter"过滤器:
{
"index" : {
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"tokenizer" : "standard",
"filter" : ["standard", "lowercase", "my_word_delimiter"]
}
},
"filter" : {
"my_word_delimiter" : {
"type" : "word_delimiter",
"preserve_original": "true"
}
}
}
}
}
适合我:-) ES docs: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-word-delimiter-tokenfilter.html
两者都会切断"""。
答案 1 :(得分:1)
我遇到了类似的问题,单独的雪球分析仪并没有为我工作。不知道它是否应该。这是我使用的:
properties: {
name: {
boost: 10,
type: 'multi_field',
fields: {
name: { type: 'string', index: 'analyzed', analyzer: 'title_analyzer' },
untouched: { type: 'string', index: 'not_analyzed' }
}
}
}
analysis: {
char_filter: {
remove_accents: {
type: "mapping",
mappings: ["`=>", "'=>"]
}
},
filter: {},
analyzer: {
title_analyzer: {
type: 'custom',
tokenizer: 'standard',
char_filter: ['remove_accents'],
}
}
}
使用分析仪时,Admin indices analyze tool也很棒。
答案 2 :(得分:0)
在您的查询中,您正在搜索_all
字段,但您的分析器仅适用于单个字段。要为_all
字段启用此功能,只需make snowball your default analyzer。