弹性搜索嵌套搜索查询

时间:2017-02-09 12:36:15

标签: elasticsearch nest

我在使用弹性搜索嵌套实现搜索时遇到困难。 我必须使用弹性搜索实现类似查询。 对于前从表格中选择*,其中包含'%abc xyz%' 等用户名 正如您在上面的sql查询中所看到的,我已经应用了类似查询的字符串" abc"空格和另一个字符串" xyz"。同样,我想在弹性搜索中使用此查询。任何人都可以帮我在弹性搜索嵌套中实现这样的查询吗?

以下是查询

Client.Search<Video>(s => s
    .Query(q => q
        .Match(m => m
            .OnField("video_parent")
            .Query("0")
        ) && q
        .Match(m => m
            .OnField("video_status")
            .Query(objVideosFilterCriteria.Vide‌​oStatus.ToString())
        ) && q
        .MatchPhrase(ff=>ff
            .OnField("video_title")
            .Query(objVideosF‌​ilterCriteria.Search‌​String)
        ) && q
        .Range(r => r
            .OnField(f => f.video_date)
            .GreaterOrEquals(fromDate)
            .LowerOrEquals(toDate‌​)
        ) 
    )
    .From(objVideosFilterCriteria.PageIndex)
    .Size(objVideosFilt‌​erCriteria.PageSize)
‌​); 

以上是我正在使用的查询。在此查询中,我正在使用

q.MatchPhrase(ff=>ff
    .OnField("video_title")
    .Query(objVideosF‌​‌​ilterCriteria.Sear‌​ch‌​String)
) 

用于类似查询。但它似乎不起作用。 我正在使用下面的数据集,并希望从下面的列表中过滤数据。

"hits" : [
  {       
    "_source" : {
      "video_id" : 265006,
      "video_title" : "nunchuk rockin roller II"
    }
  },

  {        
    "_source" : {
      "video_id" : 265013,
      "video_title" : "?Shaggy?????Locks???7??????Alberto E. Interview {407} 967 ~ 8596?"
    }
  },
  {        
    "_source" : {
      "video_id" : 265014,
      "video_title" : "Shakin' Stevens - Kalundborg Rocker"
    }
  },
  {       
    "_source" : {
      "video_id" : 265019, 
      "video_title" : "?Shaggy?????Locks? = 7??????Greg M. Interview {407} 967 ~ 8596?"
    }
  },
  {       
    "_source" : {
      "video_id" : 265023, 
      "video_title" : "?Shaggy?????Locks? = 7??????Jason M. Interview {407} 967 ~ 8596?"
    }    
  }

例如,我想搜索关键字&#34; kin rol&#34;在&#34; video_title&#34;字段所以使用上面的数据,它应该获取一个记录,它存在于上面列表的第一个位置,但在我当前的查询中,我得到了。什么都没有。

1 个答案:

答案 0 :(得分:0)

您必须使用通配符来获取想要的数据。

 string searchTerm = "*kin rol*";

 .Query(q => q.Wildcard(wc => wc.Field(f => f.video_title).Value(term)));

请记住,通配符查询的速度可能很慢,建议不要以*通配符开头。

如果要进行空间搜索,还需要添加分析器。请参考以下链接

  1. Elasticsearch Nest wildcard query with spaces
  2. https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html