[英]Elastic search: Partial search not working properly
部分搜索不适用于多个字段。
数据:-“ Sales inquiries generated
”。
{
"query_string": {
"fields": ["name", "title", "description", "subject"],
"query": search_data+"*"
}
}
案例1:当我将搜索数据作为“inquiri”传递时,它工作正常,但是当我将搜索数据作为“inquirie”传递时,它不起作用。
案例2:当我将搜索数据作为“销售”传递时,它工作正常,但是当我将搜索数据作为“销售”传递时,它不起作用。
案例3:当我将搜索数据作为“生成”传递时,它工作正常,但是当我将搜索数据作为“生成”传递时,它不起作用。
我以这种方式定义了我的领域。
text_analyzer = analyzer("text_analyzer", tokenizer="standard", filter=["lowercase", "stop", "snowball"])
name = Text(analyzer=text_analyzer, fields={"raw": Keyword()})
title = Text(analyzer=text_analyzer, fields={"raw": Keyword()})
subject = Text(analyzer=text_analyzer, fields={"raw": Keyword()})
我的代码有什么问题? 任何帮助将非常感激。 提前致谢。
这是由于使用了词干的snowball
令牌过滤器而发生的,请参阅官方雪球文档以获取更多信息。
我使用您的设置创建相同的分析器以查看为您的文本生成的标记,因为在索引标记与搜索词标记匹配时发生最终搜索。
ES 提供了不错的 REST api,您可以轻松重现该问题:
使用您的设置创建索引
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"snowball",
"stop"
]
}
}
}
},
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
创建索引后,您可以使用分析 API来查看为您的文本生成的标记。
POST http://{{hostname}}:{{port}}/{{index-name}}/_analyze
{
"analyzer": "my_analyzer",
"text": "Sales inquiries generated"
}
{
"tokens": [
{
"token": "sale",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "inquiri",
"start_offset": 6,
"end_offset": 15,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "generat",
"start_offset": 16,
"end_offset": 25,
"type": "<ALPHANUM>",
"position": 2
}
]
}
您可以看到与您的搜索查询匹配的所有标记都是相同的,因此您将获得其他搜索词的结果,这意味着在查询而不是原始时,您正在使用文本字段的关键字部分
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.