1

我正在尝试在弹性搜索中使用渗透函数。它工作得很好,但开箱即用没有处理单数/复数等的词干。关于这个主题的文档相当薄,所以我想知道是否有人已经完成了这项工作以及需要哪些设置。目前我没有索引我的文档,因为我没有搜索它们,只是将它们通过过滤器以触发通知。

4

1 回答 1

5

您可以使用percolate API来针对 percolators 测试文档,而无需对它们进行索引。但是,对于您的文档, percolateAPI 需要 andindex和 a 。type这样它就知道文档中的每个字段是如何定义(或映射)的。

分析器属于索引,映射/类型定义中的字段可以使用全局定义的分析器,也可以使用为您的索引定义的自定义分析器。

例如,我们可以为 index 定义一个映射test,使用全局定义的分析器键入test如下:

curl -XPUT 'http://127.0.0.1:9200/test/?pretty=1'  -d '
{
   "mappings" : {
      "test" : {
         "properties" : {
            "title" : {
               "type" : "string",
               "analyzer" : "english"
            }
         }
      }
   }
}
'

或者,您可以设置一个仅属于test索引的自定义分析器:

curl -XPUT 'http://127.0.0.1:9200/test/?pretty=1'  -d '
{
   "mappings" : {
      "test" : {
         "properties" : {
            "title" : {
               "type" : "string",
               "analyzer" : "my_english"
            }
         }
      }
   },
   "settings" : {
      "analysis" : {
         "analyzer" : {
            "my_english" : {
               "stopwords" : [],
               "type" : "english"
            }
         }
      }
   }
}
'

现在我们可以创建我们的过滤器,指定它属于哪个索引:

curl -XPUT 'http://127.0.0.1:9200/_percolator/test/english?pretty=1'  -d '
{
   "query" : {
      "match" : {
         "title" : "singular"
      }
   }
}
'

并使用percolateAPI 对其进行测试,再次指定索引和类型:

curl -XGET 'http://127.0.0.1:9200/test/test/_percolate?pretty=1'  -d '
{
   "doc" : {
      "title" : "singulars"
   }
}
'
# {
#    "ok" : true,
#    "matches" : [
#       "english"
#    ]
# }
于 2013-02-13T11:21:49.263 回答