当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch-与“and”和“ampersand”的搜索结果相同(

谈萧迟
2023-03-14

"在Elasticsearch中设计索引以便"

我们如何使Elasticsearch返回相同的结果,无论搜索是否使用"and"作为查询字符串或&"

例如,有一个查询来查找包含“和/”的所有电影标题

  1. 先生。

所以在这种情况下,搜索是否用“和”或“

从我的Kibana开发工具中转储

放置测试索引{“设置”:{“副本的数量”:0,“碎片的数量”:1},“映射”:{“文档”:{“属性”:{“电影名称”:{“类型”:“文本”}}}

把 /test_index/doc/1{"movie_name":"Mr.

PUT/test\u index/doc/2{“电影名”:“杰克和吉尔”}

把 /test_index/doc/3{"movie_name":"abc和def

PUT/test\u index/doc/4{“电影名称”:“虚拟名称”}

下面的两个查询应该返回相同的结果

>

  • 获取测试索引/_搜索{“大小”:20,“查询”:{“匹配”:{“电影名称”:”

    GETtest_index/_search{"大小": 20,"查询":{"匹配":{"movie_name":"和" } } }

  • 共有2个答案

    微生学
    2023-03-14
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "tokenizer": "keyword",
              "char_filter": [
                "my_char_filter"
              ]
            }
          },
          "char_filter": {
            "my_char_filter": {
              "type": "mapping",
              "mappings": [
                "+ => plus",
                "& => and"
              ]
            }
          }
        }
      }
    }
    

    为此,您应该创建char过滤器。

    使用上述分析器创建索引

    POST my_index/_analyze
    {
      "analyzer": "my_analyzer",
      "text": "&"
    }
    

    输出:

    {
      "tokens": [
        {
          "token": "and",
          "start_offset": 0,
          "end_offset": 1,
          "type": "word",
          "position": 0
        }
      ]
    }
    

    如果不使用上面的字符过滤器分析器运行上面的分析,您将得到

    {
      "tokens": []
    }
    

    原因:在ES中-创建文本类型的字段时,符号将被删除。

    羊越
    2023-03-14

    有几种方法可以做到这一点

    >

    保留您的标准分析器,并添加一个字符替换过滤器来替换任何"

     类似资料:
    • 我有三个索引,它们都共享一个特定的键值对。当我用api进行全面搜索时”http://localhost:9200/_search“使用请求正文 它只返回其中两个索引的结果。我尝试使用相同的请求正文,将url更改为仅在丢失的索引中搜索”http://localhost:9200/index_name/_search“这很管用。我有什么遗漏吗? 插入所有三个索引的代码遵循相同的过程,我使用elasti

    • 我使用logstash将我的mysql表数据保存到elasticsearch中。现在我想使用特定字段从elasticsearch获取数据。我可以使用id获取数据,但无法使用其他字段检索数据。 我正在使用elasticsearch 5.6.12和Spring boot 2.0 searchcontroller.java 我想用first_name搜索,但什么都没有显示。我在这里做错了什么?

    • 我目前正在参与使用Liferay(6.1 GA2)的项目。Liferay搜索结果似乎提供了指向Web内容片段的链接,而不是指向包含这些片段的页面的链接。 你们中有人经历过这个问题吗?你知道怎么解决吗? 非常感谢朋友们。 最好的,阿尔贝托

    • 首先,对不起我的英语不好! 我是Lucene图书馆的新人(从上周三开始),我试图了解如何根据找到的术语获得匹配文档的最佳相关性级别。 我使用Lucene 4.10。0(无Solr) 我能够索引/搜索英语/阿拉伯语文本,以及支持这些文本的点击突出显示。 现在我有一个问题与搜索结果的相关性。 如果我在三个文档中搜索“穆罕默德·奥马尔”: 我得到同样的分数为这3文档。 看起来Lucene忽略了单词顺序,

    • 查询:{“explain”:true,“size”:500,“Query”:{“query_string”:{“query_string”:{“query_string”:“((names.name:(BANK AMERICA\\)”)^50或(names.name:(BANK AMERICA\))^30或(name_pair:\“BANK AMERICA\\\)^30或(name_name:(B

    • 我已经完成了名称索引。它包含椅子、椅子等数据。 当我尝试用“cha”搜索时,它不会返回任何椅子。这是返回“毛毯”,我期待的文件有椅子。 下面是我的代码: 搜索请求: 搜索响应: } 映射: 我该怎么解决这个问题? 谢谢,Sri