我正在准备一个带有Elasticsearch的现场搜索引擎,并且是Elasticsearch的新手。使用此引擎的网站为 土耳其语/英语 。
在土耳其,我们有土耳其字母,例如 “ğ”,“ü”,“ş”,“ı”,“ö”,“ç” 。但是,当我们通常搜索时,我们使用字母
‘g’,’u’,’s’,’i’,’o’,’c’ 。 这不是规则,但我们通常会这样做,就像习惯一样,这是我们以前习惯的。
现在,我有一个名为“ product”的文档类型,该类型具有多个字符串属性,并且其中一些嵌套。例如:
public class Product {
public string ProductName { get; set; }
public Category Category { get; set; }
//...
}
public class Category {
public string CategoryName { get; set; }
//...
}
我的目标是这样的:
现在,我做了什么:
映射的示例代码:
// some more mappings which uses the same mapping for all string fields.
.Map<Yaziylabir.Extensions.TagManagement.Models.TagModel>(m => m.AutoMap().Properties(p => p
.String(s => s
.Name(n => n.Tag).Analyzer("sanalyze")))))
.Settings(s => s
.Analysis(ans => ans
.Analyzers(anl => anl
.Custom("sanalyze", c => c
.Tokenizer("standard")
.Filters("lowercase", "asciifolding")))));
我尝试使用两个不同的查询来搜索存储的文档:
q &= Query<ProductModel>.QueryString(t => t.Query(Keyword).Analyzer("sanalyze"));
q &= Query<ProductModel>.QueryString(t => t.Query(Keyword));
第二个不使用分析器方法,因为在elasticsearch文档中,它说elasticsearch将使用字段上使用的分析器。因此,我认为搜索时无需再次定义它。
我得到的结果是:
顺便说一句:
文档包含“ Eşarp ”作为ProductName值,当我检查 elasticsearch 时创建了“ esarp ”字段术语。
文档包含“ Bordo ”作为值和“ bordo ”作为字段术语。
我无法达到我想要的。我做错了什么?-我应该使用其他过滤器而不是Asciifolding吗?-我应该在带有asciifolding的情况下使用preserveOriginal吗?我不想使用该选项不增加分数。-有什么不同吗?
你能帮我么?
如果您不清楚我要问的是什么,请告诉我,我会尽力使其更清楚。
谢谢。
使用默认设置query_string
表示您正在该_all
字段中搜索。该_all
领域有自己的分析仪- standard
一个。
您需要指定要在哪个字段query_string
上执行操作:
"query": {
"query_string": {
"query": "your_field_name:esarp"
}
}
要么
"query": {
"query_string": {
"query": "esarp",
"default_field": "your_field_name"
}
}
我正在准备一个带有elasticsearch的站内搜索引擎,我是elasticsearch的新手。将使用此引擎的站点为土耳其语/英语。 在土耳其,我们有像 'ğ', 'ü', 'ş', 'ı', 'ö', 'ç'. 这样的土耳其字母,但是当我们通常搜索时,我们会使用字母“g”、“u”、“s”、“i”、“o”、“c”。这不是一个规则,但我们通常会这样做,像习惯一样思考,这是我们过去习惯的。 现在,我
问题内容: 我开始四处寻找搜索引擎,经过一番阅读后,我决定使用ElasticSearch(这是非常了不起的:)),我的项目在C#中,所以我四处寻找客户端并开始使用NEST,一切都很简单,但是我搜索部分有些混乱。 我想搜索 特定类型的 所有字段 ,然后 输入 以下代码: 我看到许多字符串查询搜索已被弃用,并想确保上面的方法是正确的方式(上面未标记为已弃用…)对于一个简单的任务来说也有点长,所以也许有
问题内容: 我有两个具有以下映射的索引(我将简化它们的映射): 1)AccountType映射: 2)ProductType映射: 现在,我有几件事需要弄清楚: 1)首先,有一个索引是一个好主意,在我的情况下是帐户,并且产品是嵌套对象,但是在这里每次我要更新/添加新产品时,我都必须重新索引(更新)整个帐户文件? 2)我的第二个问题是:我想具有搜索功能,因此,如果用户通过在文本框中键入内容进行搜索,
问题内容: 更新以显示工作示例 我正在尝试对ElasticSearch中的用户名集合进行部分搜索。 到处搜索已经为我指明了方向,但是我为正确的实施而感到困惑,但未获得任何结果。 这是我正在从事的项目中剥离的相关代码。 我尝试了不同的组合和搜索类型,但无济于事。 setup.cs Profile.cs 任何提示将不胜感激。 问题答案: 从nGram令牌过滤器上的es文档中了解一下: 注意事项 您需要
问题内容: 我有一个基本的Elasticsearch查询,看起来像这样 我得到了结果,从合理的角度来看,这没有问题。 所以我尝试在elasticsearch.net中做到这一点 而且我没有任何结果。如果我只有一个带有新{}的搜索正文,那么我会获得点击率,但不会被过滤。 我究竟做错了什么? 问题答案: 如果直接使用低级客户端(elasticsearch.net),它将不会进行任何规范化处理并逐字序列
问题内容: 我创建了这个功能: 该函数在2个索引中查找搜索词。Visual Studio向我显示以下消息: “已弃用。您可以在查询中指定_index以定位特定索引” 但是我该怎么办呢? 问题答案: 由于不建议使用indexs查询,因此它目前仍可以使用,但不推荐使用该警告是可能在将来的主要版本中将其删除。 您可以通过以下方式实现与索引查询相同的功能: 产生以下查询JSON