为啥 ElasticSearch 没有找到我的术语

Posted

技术标签:

【中文标题】为啥 ElasticSearch 没有找到我的术语【英文标题】:Why ElasticSearch is not finding my term为什么 ElasticSearch 没有找到我的术语 【发布时间】:2011-06-26 05:51:53 【问题描述】:

我刚刚安装并测试了弹性搜索,它看起来很棒,我需要知道一些我有配置文件的事情

elasticsearch.jsonconfig 目录中

    
"network" : 
    "host" : "127.0.0.1"
,
"index" : 
    "number_of_shards": 3,
    "number_of_replicas": 1,
    "refresh_interval" : "2s",        
    "analysis" : 
        "analyzer" :                 
            "index_analyzer" :                     
                "tokenizer" : "nGram",
                "filter" : ["lowercase"]
            ,
            "search_analyzer" :                                                     
                "tokenizer" : "nGram",
                "filter" : ["lowercase"]
            
        ,                               
        "// you'll need lucene dep for this: filter" :                 
            "snowball": 
                "type" : "snowball",
                "language" : "English"
            
        
    



如果我搜索关键字,我插入了一个包含单词 searching 的文档 search 它说什么都没找到...

不会在索引之前停止,否则我错过了配置中的某些内容 ....

【问题讨论】:

你在搜索吗?文档是什么样的? $ curl -XPUT http://localhost:9200/twitter/tweet/1 -d ' "user": "kimchy", "post_date": "2009-11-15T13:12:00", "message": "Trying out searching teaching, so far so good?" ' curl -XGET localhost:9200/twitter/tweet/_search?q=message:search 【参考方案1】:

您的查询看起来如何?

您的配置看起来不太好。试试:

 ...
"index_analyzer" :                     
   "tokenizer" : "nGram",
   "filter" : ["lowercase", "snowball"]
,
 "search_analyzer" :                                                     
    "tokenizer" : "nGram",
    "filter" : ["lowercase", "snowball"]

,
"filter" : 
                "snowball": 
                    "type" : "snowball",
                    "language" : "English"
                
            

【讨论】:

【参考方案2】:

我在覆盖“default_search”和“default_index”分析器时也遇到了麻烦。

这虽然有效。 如果需要,您可以添加“index_analyzer”以默认类型内具有未指定分析器的所有字符串字段。

curl -XDELETE localhost:9200/twitter

curl -XPOST localhost:9200/twitter -d '
"index": 
   "number_of_shards": 1,
    "analysis": 
       "filter": 
                "snowball": 
                    "type" : "snowball",
                    "language" : "English"
                
                 ,
       "analyzer":  "a2" : 
                    "type":"custom",
                    "tokenizer": "standard",
                    "filter": ["lowercase", "snowball"]
                    
                  
     
  

'

curl -XPUT localhost:9200/twitter/tweet/_mapping -d '
    "tweet" : 
        "date_formats" : ["yyyy-MM-dd", "dd-MM-yyyy"],
        "properties" : 
            "user": "type":"string",
            "message" : "type" : "string", "analyzer":"a2"
        
    '

curl -XPUT http://localhost:9200/twitter/tweet/1 -d ' "user": "kimchy", "post_date": "2009-11-15T13:12:00", "message": "Trying out searching teaching, so far so good?" '

curl -XGET localhost:9200/twitter/tweet/_search?q=message:search 

curl -XGET localhost:9200/twitter/tweet/_search?q=message:try 

【讨论】:

以上是关于为啥 ElasticSearch 没有找到我的术语的主要内容,如果未能解决你的问题,请参考以下文章

具有高基数字段的 ElasticSearch 术语和基数性能

为啥使用 C#/ElasticSearch 进行此 NEST 通配符搜索没有返回任何文档?

并非所有术语都适用于 ElasticSearch 查询

Elasticsearch 关于嵌套对象的重要术语

MySQL不香吗,为啥京东放弃它拥抱Elasticsearch?

Elasticsearch匹配短语前缀不匹配所有术语