我想在整个Elasticsearch索引上自动应用n-gram标记化。
文档提到最终运行分析以应用标记器,但分析器似乎需要显式字符串输入才能工作。
问题:我如何告诉ES“分析整个索引”(即扫描并标记所有内容)?
上下文:我有一些ES索引,主要来自简单帖子(例如广告、事件、用户配置文件)的MYSQL数据库,但一些索引也是JSON中固定的预定义术语列表(例如200个品牌、400个标签、20个类别等),几乎不会更改。在任何情况下,内容都很简单;没有大规模的文章,我不索引段落。我正在尝试从我的应用程序的搜索栏中构建智能的自动完成和建议,只想对现有和固定内容进行预分析。最终,当用户有更多动态的“大数据”时,我将整合分析。
相关链接:
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-update-settings.html#update-设置分析
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-custom-analyzer.html
尝试:
在这里,我在索引上设置了一个标记器:
// Close the particular index first
POST /my-index-000001/_close
// Apply new settings: tokenizer defined and included in an analyzer
PUT /my-index-000001/_settings
{
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 10,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
// Re-open the index
POST /my-index-000001/_open
此时还没有发生任何事情。我必须在索引上运行分析器......但是分析器需要显式字符串输入。相反,我只想在当前存储在索引中的所有内容上运行它。
POST /my-index-000001/_analyze
{
"analyzer": "my_analyzer",
// Is there a way to just apply it to the entire index?
"text": "The cat is black"
}
更新:
根据Opster的回答,这里有一个经过调整的脚本。如前所述,重新编制索引有几种可能性。我确实成功地使用了索引复制方法,但是我忘了我在我的项目中也设置了一个重新索引脚本,这非常方便。
PUT /my-index-000001/_settings
{
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
},
"default": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 2,
"max_gram": 10,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
如果我没弄错的话,你有一个现有的索引,你想在所有字段上应用新的标记器,你刚才做的是定义你的自定义分析器,它在你的索引设置中使用边缘标记器,并期望所有字段都开始使用它,这是一个错误的假设
解决方案
_source
字段,请使用reindex API从旧ES索引创建新索引,这将是更容易、更快和推荐的重新索引数据的方式。我有一个带有FreeMarkerViewResolver,FreeMarkerConfigurer的webapp和一个存储由freemarker处理的文件的路径。我的问题是其中一个文件实际上不是 ftl 文件,不应该被处理。它与其他实际 ftl 文件一起位于,我找不到任何简单的方法将其从其 API 中的 ViewResolver 中排除。 有没有一种方法可以禁用整个文件的自由标记模板解析?
我正在构建一个webapp,如果禁用Javascript,它将依赖于 标记。我想验证该标记所显示的内容,但我不确定如何使用我所拥有的任何框架或任何一般框架来实现这一点。 现在的测试,我使用噩梦和茉莉花测试。我不必使用这些,但如果可能的话,我仍然希望使用Javascript。 我在这里完全被难住了,甚至不知道从哪里开始--所有的StackOverflow问题似乎都是关于如何使用 ,而不是在端到端或单
null null 所以我有这个标签,它当前是一个按钮。当我点击这个按钮时,它运行一个显示消息。 如何使此标记在页面打开或重新加载时自动运行。 null null
问题内容: 我正在使用NLTK来分析一些经典文本,并且遇到麻烦按句子标记文本的麻烦。例如,这是我从 Moby Dick 获得的摘录的内容: 考虑到梅尔维尔(Melville)的语法有些陈旧,我不希望在这里达到完美,但是NLTK应该能够处理终端双引号和标题,例如“ Mrs”。但是,由于令牌生成器是无监督训练算法的结果,所以我不知道该如何进行修补。 有人建议使用更好的句子标记器吗?我更喜欢可以破解的简
我有两段XML,其中一部分是:
我想展示整个世界的流行地图,并在上面标记。 我尝试使用谷歌地图,但它似乎(这里)不支持缩小到足以显示整个世界。 从维基百科上看(这里),地球的中心位于北纬30°00′东经31°00′,但这似乎是在埃及,它看起来不像世界地图的中心,即使在维基百科页面上也是如此: 我在这里也发现了一个类似的问题,所以我将其转换为Android代码: 但它根本没有显示整个世界: 我也尝试过使用zoom(看这里),但它从