弹性搜索是用以下主体创建的
body = {
"mappings": {
"properties": {
"TokenizedDocumentFileName": {
"type": "text",
"analyzer": "my_analyzer",
"search_analyzer": "standard"
}
}
},
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "keyword",
"filter": ["word_delimiter",
"lowercase"
]
}
}
},
"number_of_shards": "1",
"number_of_replicas": "0"
}
}
下面是elasticsearch中的两种不同元数据
{'_index': 'fileboundunitmanuals',
'_type': '_doc',
'_id': '997439.PDF',
'_version': 2,
'_seq_no': 166958,
'_primary_term': 1,
'found': True, '_source': {
'IndexKey': '997439.PDF',
'DocumentID': 997439,
'Extension': 'PDF',
'FileID': 174508,
'DocumentFileName': '\\UNIT xxxxx\\411xxx\\A9.xxxx_xxxxx GAS ENGINE xxxxx_x_997439.PDF',
'TokenizedDocumentFileName': '\\UNIT xxxxx\\411xxx\\A9. xxxx xxxxx GAS ENGINE xxxxx x 997439.PDF',
'F1': 'UNIT xxxxx',
'ProjectID': 8}}
第二记录
{'_index': 'fileboundunitmanuals',
'_type': '_doc',
'_id': '3929829.pdf',
'_version': 1,
'_seq_no': 538517,
'_primary_term': 3,
'found': True, '_source': {
'Extension': 'pdf',
'DocumentID': 3929829,
'IndexKey': '3929829.pdf',
'FileID': '',
'DocumentFileName': '\\Unit xxxxx\\Mary Testing\\marynewfiletest.pdf',
'TokenizedDocumentFileName': '\\Unit xxxxx\\Mary Testing\\marynewfiletest.pdf',
'F1': 'Unit xxxxx',
'ProjectID': 8}}
现在,在elasticsearch中使用以下查询搜索第一条记录时
{
"query":{
"bool":{
"must":{
"match":{
"TokenizedDocumentFileName":{
"query":"997439"
}
}
},
"filter":{
"bool":{
"must":[
{
"term":{
"ProjectID":8
}
},
{
"term":{
"Extension":"pdf"
}
}
]
}
}
}
}
}
查询以搜索第二条记录
{
"query":{
"bool":{
"must":{
"match":{
"TokenizedDocumentFileName":{
"query":"marynewfiletest"
}
}
},
"filter":{
"bool":{
"must":[
{
"term":{
"ProjectID":8
}
},
{
"term":{
"Extension":"pdf"
}
}
]
}
}
}
}
}
第一个查询是给我正确的结果,因为查询"997439"存在于TokenizedDocumentFileName中,但是当我搜索marytest 2条记录时,我得到了下面的响应。
{'took': 0, 'timed_out': False, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0}, 'hits': {'total': {'value': 0, 'relation': 'eq'}, 'max_score': None, 'hits': []}}
但当我给出文件名和扩展名,即“marytesting.pdf”时,在这种情况下,我得到了正确的结果。
GET-fileunitmanuals的输出
{
"fileboundunitmanuals" : {
"aliases" : { },
"mappings" : {
"properties" : {
"DocumentFileName" : {
"type" : "text",
"analyzer" : "my_analyzer",
"search_analyzer" : "standard"
},
"DocumentID" : {
"type" : "long"
},
"Extension" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"F1" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"FileID" : {
"type" : "long"
},
"IndexKey" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"ProjectID" : {
"type" : "long"
},
"TokenizedDocumentFileName" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
},
"settings" : {
"index" : {
"number_of_shards" : "1",
"provided_name" : "fileboundunitmanuals",
"creation_date" : "1607069298331",
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"filter" : [
"word_delimiter",
"lowercase"
],
"tokenizer" : "keyword"
}
}
},
"number_of_replicas" : "0",
"uuid" : "u8HasYfVT6iMr7XGpdjJHg",
"version" : {
"created" : "7090199"
}
}
}
}
}
所以问题是为什么部分搜索对第一个有效,而不是对第二个有效。
根据您的映射,字段标记化文档文件名
只是文本
和关键字
,因此它没有您的分析器。因此,您的第一个查询能够工作只是巧合。
在为第一个文档编制索引之前,应确保使用正确的映射正确创建索引。
PS:我能够用你给的设置/映射创建你的索引,我得到了两个查询的预期结果,所以你就快到了。
问题内容: 目的 要使用Elasticsearch的记录器功能来更好地调试服务器端Groovy脚本代码。 问题总结 无法汇入 细节 使用Elasticsearch 2.3 存储在Java客户端中的脚本已经能够通过来成功访问它们。即,文件夹位置应正确。我已经看到了将代码放置在中的建议,但实际上对我不起作用) 尝试过此解决方案,即: 但是Elasticsearch日志显示了一个编译器投诉: 我检查Gi
问题内容: 我想使用Log4J记录我的Java项目。我在src目录中创建了一个log4j.properties文件,其内容如下: 例如,我只想在我的主要方法中使用“ DEFAULT_LOGGER”。所以我写道: 但是,当我执行main方法时,我将消息“ Process Logger”打印到所有Appender(stdout,file和file2),但是我只想将其打印到file2。我该怎么做,或者更
我有一个受保护的Web API正在运行,我想访问它。在Azure中,应用注册是: 具有Web API租户管理员权限的SPA Web API没有租户管理员权限,因此请求其id的令牌将返回“应用需要访问资源的权限”错误 我正在尝试获取Web API的承载令牌。问题是它不适用于MSAL,但适用于ADAL。 以下是我的“SPA”的ADAL vanilla JS代码: 如果我在“邮递员”中复制令牌并执行请求
我正在尝试为Shopizer配置Elasticsearch,但得到以下错误。 我尽我所能配置了Elasticsearch。所以在elasticsearch.yml中我设置了。我还将shopizer-core.properties重命名为configs.properties。 我报告的最初错误是因为我没有运行ElasticSearch。我把它装在我的Mac上了。当它运行时,我现在得到以下错误。我签入
我有两个版本的oracle,oracle Database 11g Enterprise Edition 11.2.0.1.0版本-生产版和oracle Database 11.g Enterprise Edition版本11.2-0.3.0版本-64位生产版 我有这个sql: 它适用于11.2.0.1.0,但在11.2.0.3.0上,我收到此错误: 我能做些什么来解决这个问题? 感谢。
问题内容: 当仅使用IN运算符时,以下查询工作正常 但是当我触发这个查询时,它给我一个空白的结果 我是在做错事还是其他人遇到了同样的问题? 问题答案: 我认为您必须将“ IN”条件放在括号中才能使其起作用: 它与N1QL处理器评估操作员的优先级有关 如果使用EXPLAIN关键字运行它,它将显示它如何相互链接条件。 例如 与