elasticsearch - 在 ElasticSearch 中忽略撇号(所有格)

标签 elasticsearch tire

我试图让用户提交查询“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'
                }
            }
          },

最佳答案

有两种处理所有格撇号的官方方法:

1) 使用 ES 文档中描述的“possessive_english”词干分析器: 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"
            }
        }
    }
  }
}

如果您愿意,除了“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 文档: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-word-delimiter-tokenfilter.html

两者都会切断“的”。

关于elasticsearch - 在 ElasticSearch 中忽略撇号(所有格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16201814/

相关文章:

java - [sum] 类型的聚合器无法接受子聚合

ruby-on-rails - Elasticsearch /轮胎 : Find similar articles

ruby-on-rails - 轮胎搜索不能忽略口音

ruby-on-rails - 使用轮胎时如何将GET参数附加到 Elasticsearch

elasticsearch - [search_after] 错误中 VALUE_STRING 的未知键

elasticsearch - Elasticsearch 中如何存储关键字和数字数据类型?它存储在倒排索引中吗?

elasticsearch重新索引文档减少可用空间

c# - 如何使用NEST执行子聚合?

ruby-on-rails - 将 searchkick 与 elasticsearch 插件一起使用