ElasticSearch n-gram tokenfilter 未找到部分单词
Posted
技术标签:
【中文标题】ElasticSearch n-gram tokenfilter 未找到部分单词【英文标题】:ElasticSearch n-gram tokenfilter not finding partial words 【发布时间】:2011-06-30 00:04:05 【问题描述】:我一直在为我的一个新项目使用 ElasticSearch。我已将默认分析器设置为使用 ngram tokenfilter。这是我的 elasticsearch.yml 文件:
index:
analysis:
analyzer:
default_index:
tokenizer: standard
filter: [standard, stop, mynGram]
default_search:
tokenizer: standard
filter: [standard, stop]
filter:
mynGram:
type: nGram
min_gram: 1
max_gram: 10
我创建了一个新索引并向其中添加了以下文档:
$ curl -XPUT http://localhost:9200/test/newtype/3 -d '"text": "one two three four five six"'
"ok":true,"_index":"test","_type":"newtype","_id":"3"
但是,当我使用查询 text:hree
或 text:ive
或任何其他部分术语进行搜索时,ElasticSearch 不会返回此文档。只有当我搜索确切的术语(如text:two
)时,它才会返回文档。
我也尝试过更改配置文件,使 default_search 也使用 ngram 标记过滤器,但结果是一样的。我在这里做错了什么,我该如何纠正?
【问题讨论】:
嗨,Brian,为了完整起见,能否发布更正后的配置?我也遇到了同样的问题。 【参考方案1】:不确定 default_* 设置。 但是应用指定 index_analyzer 和 search_analyzer 的映射是有效的:
curl -XDELETE localhost:9200/twitter
curl -XPOST localhost:9200/twitter -d '
"index":
"number_of_shards": 1,
"analysis":
"filter":
"mynGram" : "type": "nGram", "min_gram": 2, "max_gram": 10
,
"analyzer": "a1" :
"type":"custom",
"tokenizer": "standard",
"filter": ["lowercase", "mynGram"]
'
curl -XPUT localhost:9200/twitter/tweet/_mapping -d '
"tweet" :
"index_analyzer" : "a1",
"search_analyzer" : "standard",
"date_formats" : ["yyyy-MM-dd", "dd-MM-yyyy"],
"properties" :
"user": "type":"string", "analyzer":"standard",
"message" : "type" : "string"
'
curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elastic Search"
'
curl -XGET localhost:9200/twitter/_search?q=ear
curl -XGET localhost:9200/twitter/_search?q=sea
curl -XGET localhost:9200/twitter/_mapping
【讨论】:
好吧,我实际上放弃了弹性搜索,现在设置好 solr 并完美运行。有时间我会试试这个解决方案,看看效果如何。 我已提交对此答案的编辑,因为它具有误导性,并试图将映射应用于整个索引并需要将其应用于类型。 curl -XPUT localhost:9200/twitter/_mapping -d ' 应该是 curl -XPUT localhost:9200/twitter/tweet/_mapping -d '【参考方案2】:您应该检查获取映射 API 以查看您的映射是否已应用: http://www.elasticsearch.org/guide/reference/api/admin-indices-get-mapping.html
顺便说一句,邮件列表中已经说过,当索引已经包含文档时,您在 elasticsearch.yml 上放置的映射不会应用。您需要先清理索引。
我已经用 ES 尝试了 ngrams,它对我来说很好。
【讨论】:
以上是关于ElasticSearch n-gram tokenfilter 未找到部分单词的主要内容,如果未能解决你的问题,请参考以下文章
linux centos7 elasticsearch安装拼音
linux centos7 elasticsearch安装拼音