所以我有一个字段以以下格式存储值:number/year
,例如23 / 2014、24 / 2014、12 / 2015等。
因此,如果将此字段映射为not_analyzed
一个,则可以使用术语过滤器进行精确值搜索,如果我在该精确结构中搜索值(类似于1 / 2014、15 /
2014等),则可以正常工作,例如sql equals(=)
。
{
"query": {
"filtered": {
"filter": {
"term": {
"processNumber": "11/2014"
}
}
}
}
}
因此,使用11 /或/ 2014之类的其他内容进行搜索不会返回匹配。这可以。
但是,如果将字段定义为not_analyzed
,则无法sql LIKE
使用match_phrase
查询进行类型搜索。
{
"query": {
"match_phrase": {
"processNumber": "11/201"
}
}
}
在这种情况下,搜索11,11 /,/
2014或2014应该返回匹配,但不会返回。问题是,如果该字段未映射为一个,则此查询有效not_analyzed
。因此,似乎我必须使用其中之一,问题是该字段应支持两个选项以用于不同的查询,我在这里遗漏了什么吗?
您可以使用映射中的fields属性以不同的方式
分析同一字段 processNumber
:
例如,如果要使用ProcessNumber的经过分析和未经分析的版本,则映射为:
{
"type_name": {
"properties": {
"processNumber": {
"type": "string",
"index": "not_analyzed",
"fields": {
"analyzed": {
"type": "string",
"index": "analyzed"
}
}
}
}
}
}
在查询中将未分析的字段称为 processNumber 。
要引用该字段的分析视图,请使用 processNumber.analyzed
查询术语11 / 201、11等将是:
示例过滤器:
{ "query" : { "filtered" : { "filter" : { "term" : { "processNumber" : "11/2014" } } } } }
术语过滤器不分析搜索字符串,因此在这种情况下,输入将与字段倒排索引匹配:11/2014针对该字段。
示例Match_Phrase_prefix:
{ "query": { "match_phrase_prefix": { "processNumber": "11/201" } } }
match_phrase_prefix尝试检查短语中的最后一项是否为index中各项的前缀。如果指定了分析器,它将分析搜索字符串。这就是您需要在此处使用该字段的未
分析 版本的原因。如果我们使用 processNumber.analyzed 搜索查询,例如 11-201,11 | 201 也将匹配
匹配示例:
{ "query": { "match": { "processNumber.analyzed": "11" } } }
这是直接匹配,因为默认分析器(通常是标准分析器)会将11/2014标记为2014年11月。
您可以使用分析api来查看默认分析器如何分析特定文本。
curl -XPOST "http://<machine>/_analyze?text=11/2014"
问题内容: 有没有办法让ElasticSearch在分析的字段上识别完全匹配?理想情况下,我想小写,标记化,词干化,甚至对我的文档进行语音化,然后让查询提取“精确”匹配项。 我的意思是,如果我索引“汉堡包”和“汉堡包”,它们将被分析为[“汉堡包”,“小圆面包”]和[“汉堡包”]。如果我搜索“汉堡”,它将仅返回“汉堡”文档,因为这是“完全匹配”。 我尝试使用关键字标记器,但不会阻止各个标记。我是否需
问题内容: 我想在一个字段中搜索“ vision”项目,但是通过在DSL中使用match / match_phrace / term,我只得到了“ vision A”,“ vision B”,“ xx版本”,“ vision”等结果。 我想要的是精确匹配“视觉”应该获得最高分,而包含“视觉”的项目应该排在精确匹配之后。排名应该是: 我检查了Elasticsearch匹配精确术语其中识别出将“索引”
问题内容: 我有一个类似于http://drive.google.com的链接,并且我想在该链接之外匹配“ google”。 我有: 但这仅在整个文本为“ google”时才匹配(不区分大小写,因此也匹配Google或GooGlE等)。如何匹配另一个字符串中的“ google”? 问题答案: 关键是您使用的ElasticSearch正则表达式需要 完整的字符串匹配 : Lucene的模式总是锚定的
在elasticsearch中,假设我有如下文档 有一个用例,如果我在搜索栏中键入“Bio”,我应该从elasticsearch中获得匹配的字段值和字段名。 对于本例, 输入:“生物” 预期产出: 我应该使用什么类型的查询?我可以想到使用NGram标记器,然后使用匹配查询。但是,我不确定如何只获得匹配的字段值(而不是整个文档)和相应的字段名作为输出。
问题内容: 这个问题是基于之前的帖子,其中“” 或“”都无法进行“精确搜索” 。 然后,我在这里找到了类似的帖子,其中在映射定义中将搜索字段设置为not_analyzed(通过@Russ Cam)。 但是我正在使用 可能是因为该原因该解决方案无法正常工作。 因为如果我通过“ SOME”,它将与“SOME”和“SOMEOTHERLOAN”相匹配,但情况并非如此(在我先前的文章中为“ productv
我试图检查字符串是否包含完全匹配。例如: String str="这是我的字符串,具有-Policy和-p" 我怎样才能做到以下几点: