我在ElasticSearch中获取字符串部分时遇到问题。下面是索引的配置。
PUT exemplo
{
"settings": {
"analysis": {
"analyzer": {
"portuguese_br": {
"type": "portuguese"
}
}
}
},
"mappings": {
"properties": {
"id": {
"type": "integer"
},
"content": {
"type": "text",
"analyzer": "portuguese_br"
}
}
}
}
索引“样本”中有一个包含以下内容的文档:
h2 style margin 0 0 8px font size 16px color 064a7a 1 Síntese Resumo Descrição do cliente h2 div id headertipodocumento1 style min height 40px position relative class editable mce content body contenteditable true spellcheck false p eu encaminho uma Carta ao ReI
我无法通过以下请求获取文档:
GET exemplo/_search
{
"from": 0,
"size": 1,
"query": {
"bool": {
"must": [
{"regexp": {"content": ".*caminho.*"}}
]
}
}
}
有一部分内容有“encaminho”这个词。我正在搜索“caminho”,但没有得到任何结果。
我在正则表达式中做错了什么吗?
2条答案
按热度按时间irlmq6kh1#
要了解Elasticsearch如何分析您的文本,您可以使用以下API。
encaminho
部分的输出如下所示:在分析器将encaminho文本转换为encaminh后,当您搜索caminho时,它与encaminh不匹配。您可以做什么?
1.您可以在编制索引时进行搜索(查看其他注解)
1.您可以将ngram analyzer功能添加到现有分析器中
1.您可以在搜索过程中使用模糊查询
其他注意事项:数据分析是在编制索引期间执行的。但在查询期间不会分析数据,因为您使用的是通配符(regex)查询。如果您可以使用match或multi_match,则您的查询将匹配。此外,匹配查询比通配符查询快。
9o685dep2#
在字段内容中为术语“encaminhado”生成的标记为“encaminh”。尝试按术语“.caminho.”搜索时,没有匹配项。
如果您尝试使用{“regexp”:{【内容】:“.caminh."}}您可以获得文档。
另一个选项是模糊性。就像下面这个查询:
这样你也会得到结果。