我尝试使用Elasticsearch为我的内容实现A-Z导航。我需要的是显示所有以a,b,c等开头的结果。
我试过了:
"query": {
"match_phrase_prefix" : {
"title" : {
"query" : "a"
}
}
}
上面提到的查询还显示结果,其中字符串中的单词以a开头。例:
“ title”:“ Apfelpfannkuchen”,
“ title”:“ Affogato”,
“ title”:“ Kalbsschnitzel a n A ceto Balsamico”,
我只想显示第一个单词以a开头的短语。
这是我使用的映射:
$params = array(
'index' => 'my_index',
'body' => array(
'settings' => array(
'number_of_shards' => 1,
'index' => array(
'analysis' => array(
'filter' => array(
'nGram_filter' => array(
'type' => 'nGram',
'min_gram' => 2,
'max_gram' => 20,
'token_chars' => array('letter', 'digit', 'punctuation', 'symbol')
)
),
'analyzer' => array(
'nGram_analyzer' => array(
'type' => 'custom',
'tokenizer' => 'whitespace',
'filter' => array('lowercase', 'asciifolding', 'nGram_filter')
),
'whitespace_analyzer' => array(
'type' => 'custom',
'tokenizer' => 'whitespace',
'filter' => array('lowercase', 'asciifolding')
),
'analyzer_startswith' => array(
'tokenizer' => 'keyword',
'filter' => 'lowercase'
)
)
)
)
),
'mappings' => array(
'tags' => array(
'_all' => array(
'type' => 'string',
'index_analyzer' => 'nGram_analyzer',
'search_analyzer' => 'whitespace_analyzer'
),
'properties' => array()
),
'posts' => array(
'_all' => array(
'index_analyzer' => 'nGram_analyzer',
'search_analyzer' => 'whitespace_analyzer'
),
'properties' => array(
'title' => array(
'type' => 'string',
'index_analyzer' => 'analyzer_startswith',
'search_analyzer' => 'analyzer_startswith'
)
)
)
)
)
);
如果您使用的是默认映射,那么它将不适用于您。
您需要在映射中使用关键字标记器和小写过滤器。
映射将是:
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"analyzer_startswith": {
"tokenizer": "keyword",
"filter": "lowercase"
}
}
}
}
},
"mappings": {
"test_index": {
"properties": {
"title": {
"search_analyzer": "analyzer_startswith",
"index_analyzer": "analyzer_startswith",
"type": "string"
}
}
}
}
}
搜索查询test_index
:
{
"query": {
"match_phrase_prefix": {
"title": {
"query": "a"
}
}
}
}
它将返回所有以a
问题内容: 我有以下查询,以便在搜索中增加模糊性。但是,我现在意识到,匹配查询不像match_phrase那样考虑搜索字符串中单词的顺序。但是,我无法获得match_phrase给我模糊的结果。有没有办法告诉比赛考虑单词之间的顺序和距离? 问题答案: 最终发现我需要使用查询的组合,从而对模糊性和倾斜度进行了大量的微调。我需要添加一个函数来手动标记我的短语并以编程方式添加到“子句”数组中:
以下是可用的样本数据: null 示例查询: } 尝试了match_phrase_prefix,这也类似于prefix 示例查询:
1.4. 开始写第一个插件 代码位于plugin_first 让我们动手改造一下tab.js吧: 1.4.1. 代码 ;(function($) { $.fn.tab = function(options) { // 将defaults 和 options 参数合并到{} var opts = $.extend({},$.fn.tab.defaults,
在弹性搜索中,此过滤器 正确返回标题中带有“Google”的文章。 然而, 不返回任何结果,尽管事实上有些文章的标题中有“Google Earth”的确切字样。我希望它这样做。 完整查询: FWIW,我在“filter”字段中有此条件的原因是(与使用标准查询相反),有时我希望使用“must_not”而不是“must_not”,有时我还向查询添加其他元素。
使用Elasticsearch聚合,是否可以只返回每个聚合的第一次命中?我没有在弹性文档中找到详细的此功能。 我使用top\u hits聚合来确保每个聚合的第一次命中是相关的命中,因此如果我可以在单独的列表中只返回每个聚合的第一次命中,那就太好了。这是可能的,还是需要通过编程方式循环聚合查询结果?
问题内容: 我正在使用ElasticSearch,并且具有以下索引映射: 我该如何获得建议者在返回“扑热息痛片”时立即返回: 我需要使用自定义分析器和字典吗? 问题答案: 问题是参数。如果将其设置为它返回您的预期结果。我无法真正向您解释0.8为何有效的原因,因为实际上0.5意味着50%的术语可能写错了,这就是您的用例,但在某种程度上可以与0.8一起使用。也许在elasticsearch用户组中询问