c# - ElasticSearch NEST-查找带有特殊字符的结果

标签 c# elasticsearch nest

我正在尝试在 flex 索引上编写搜索查询,该查询将从字段值的任何部分返回结果。

我有一个Path字段,其中包含C:\temp\ab-cd\abc.doc之类的值

我希望能够发送查询,该查询将返回我编写的内容中与我匹配的任何部分

QueryContainer currentQuery = new QueryStringQuery
{
      DefaultField = "Path",
      Query = string.Format("*{0}*", "abc"),

};

以上将返回结果,但不会:
QueryContainer currentQuery = new QueryStringQuery
{
      DefaultField = "Path",
      Query = string.Format("*{0}*", "ab-cd"),

};

其他任何特殊字符(如 @#$%^&* 等)也是如此。

有一些通用的方法可以发送查询并准确找到我搜索的内容吗?

我的每个字段都是multi-fields,我可以使用*.raw选项,但不完全知道如何或是否应该

最佳答案

使用nGrams将文本拆分为较小的块,并使用term过滤器进行查询。优点:应该更快。缺点:索引的大小(磁盘空间)将更大,因为会生成更多的项(来自nGram过滤器)。

PUT /test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_ngram_analyzer": {
          "tokenizer": "keyword",
          "filter": [
            "substring"
          ]
        }
      },
      "filter": {
        "substring": {
          "type": "nGram",
          "min_gram": 1,
          "max_gram": 50
        }
      }
    }
  },
  "mappings": {
    "test": {
      "properties": {
        "Path": {
          "type": "string",
          "index_analyzer": "my_ngram_analyzer",
          "search_analyzer": "keyword"
        }
      }
    }
  }
}

和查询:
GET /test/test/_search
{
  "query": {
    "term": {
      "Path": {
        "value": "\temp"
      }
    }
  }
}

如果愿意,您可以将上面的配置用作任何已有映射的子字段。

如果要使用query_string,则需要注意一件事:需要转义特殊字符。例如-\:(完整列表here)。同样,在建立索引时,\ char需要转义,否则它将发出错误。这是我特别使用query_string测试的内容:https://gist.github.com/astefan/a52fa4989bf5298102d1

关于c# - ElasticSearch NEST-查找带有特殊字符的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32451951/

相关文章:

c# - 计算特殊的 UTF-8 字符

json - Elasticsearch Reindex或标志已删除的类型属性

javascript - 如何在Node.js中的Elasticsearch中执行匹配查询?

elasticsearch - 使用 Logstash 建立索引时如何修复 Elasticsearch 中的重复文档?

c# - 如何使用 NEST 客户端动态构建 Bool 查询?

c# - 未作为根连接时,无法将类型 'System.DBNull' 的对象强制转换为类型 'System.String'

c# - MediaElement 网络视频不会停止缓冲

c# - 在 C# 中处理内存映射文件的正确方法

elasticsearch - 如何为以下json创建Fluent DSL lambda表达式

c# - C#NEST ElasticSearch Default_Search分析器