- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要帮助回答三个主要问题。
我正在使用 Nest 版本 2,并且一直在查看可以找到的新文档 Here .该文档对于创建代码的某些部分很有用,但不幸的是没有解释它们是如何组合在一起的。
这是我要映射的类。
[ElasticsearchType(Name = "elasticsearchproduct", IdProperty = "ID")]
public class esProduct
{
public int ID { get; set; }
[Nested]
public List<PriceList> PriceList { get; set; }
}
[ElasticsearchType(Name = "PriceList")]
public class PriceList
{
public int ID { get; set; }
public decimal Price { get; set; }
}
和我的映射代码
var node = new Uri(HOST);
var settings = new ConnectionSettings(node).DefaultIndex("my-application");
var client = new ElasticClient(settings);
var map = new CreateIndexDescriptor("my-application")
.Mappings(ms => ms
.Map<esProduct>(m => m
.AutoMap()
.Properties(ps => ps
.Nested<PriceList>(n => n
.Name(c => c.PriceList)
.AutoMap()
)
)
)
);
var response = client.Index(map);
这是我得到的回复:
Valid NEST response built from a succesful low level call on POST: /my-application/createindexdescriptor
所以这似乎有效。下一个索引。
foreach (DataRow dr in ProductTest.Tables[0].Rows)
{
int id = Convert.ToInt32(dr["ID"].ToString());
List<PriceList> PriceList = new List<PriceList>();
DataRow[] resultPrice = ProductPriceTest.Tables[0].Select("ID = " + id);
foreach (DataRow drPrice in resultPrice)
{
PriceList.Add(new PriceList
{
ID = Convert.ToInt32(drPrice["ID"].ToString()),
Price = Convert.ToDecimal(drPrice["Price"].ToString())
}
esProduct product = new esProduct
{
ProductDetailID = id,
PriceList = PriceList
};
var updateResponse = client.Update<esProduct>(DocumentPath<esProduct>.Id(id), descriptor => descriptor
.Doc(product)
.RetryOnConflict(3)
.Refresh()
);
var index = client.Index(product);
}
}
这似乎再次起作用,但当我开始搜索时,它似乎确实按预期工作。
var searchResults = client.Search<esProduct>(s => s
.From(0)
.Size(10)
.Query(q => q
.Nested(n => n
.Path(p => p.PriceList)
.Query(qq => qq
.Term(t => t.PriceList.First().Price, 100)
)
)
));
它确实返回了结果,但我在期待
.Term(t => t.PriceList.First().Price, 100)
看起来像移动
.Term(t => t.Price, 100)
知道是在搜索嵌套的 PriceList 类,不是这样吗?
在新版本 2 文档中,我找不到批量索引部分。我试过使用这段代码
var descriptor = new BulkDescriptor();
***Inside foreach loop***
descriptor.Index<esProduct>(op => op
.Document(product)
.Id(id)
);
***Outside foreach loop***
var result = client.Bulk(descriptor);
它确实返回了成功响应,但是当我搜索时我没有得到任何结果。
如有任何帮助,我们将不胜感激。
更新
在对@Russ advise 进行更多调查后,我认为错误一定是我对带有嵌套对象的类进行批量索引。
当我使用
var index = client.Index(product);
索引我可以使用的每个产品
var searchResults = client.Search<esProduct>(s => s
.From(0)
.Size(10)
.Query(q => q
.Nested(n => n
.Path(p => p.PriceList)
.Query(qq => qq
.Term(t => t.PriceList.First().Price, 100)
)
)
)
);
搜索并返回结果,但是当我批量索引时这不再有效但是
var searchResults = client.Search<esProduct>(s => s
.From(0)
.Size(10)
.Query(q => q
.Term(t => t.PriceList.First().Price, 100)
)
);
可以,代码 b 不适用于单独的索引方法。有谁知道为什么会这样?
更新 2
@Russ 建议我看一下映射。
我用来索引的代码是
var map = new CreateIndexDescriptor(defaultIndex)
.Mappings(ms => ms
.Map<esProduct>(m => m
.AutoMap()
.Properties(ps => ps
.Nested<PriceList>(n => n
.Name(c => c.PriceList)
.AutoMap()
)
)
)
);
var response = client.Index(map);
正在发帖
http://HOST/fresh-application2/createindexdescriptor {"mappings":{"elasticsearchproduct":{"properties":{"ID":{"type":"integer"},"priceList":{"type":"nested","properties":{"ID":{"type":"integer"},"Price":{"type":"double"}}}}}}}
并调用 http://HOST/fresh-application2/_all/_mapping?pretty我得到了
{
"fresh-application2" : {
"mappings" : {
"createindexdescriptor" : {
"properties" : {
"mappings" : {
"properties" : {
"elasticsearchproduct" : {
"properties" : {
"properties" : {
"properties" : {
"priceList" : {
"properties" : {
"properties" : {
"properties" : {
"ID" : {
"properties" : {
"type" : {
"type" : "string"
}
}
},
"Price" : {
"properties" : {
"type" : {
"type" : "string"
}
}
}
}
},
"type" : {
"type" : "string"
}
}
},
"ID" : {
"properties" : {
"type" : {
"type" : "string"
}
}
}
}
}
}
}
}
}
}
}
}
}
}
fresh-application2 返回的映射根本没有提到嵌套类型,我猜这是问题所在。
我的工作嵌套查询的映射看起来更像这样
{
"my-application2" : {
"mappings" : {
"elasticsearchproduct" : {
"properties" : {
"priceList" : {
"type" : "nested",
"properties" : {
"ID" : {
"type" : "integer"
},
"Price" : {
"type" : "double"
}
}
},
"ID" : {
"type" : "integer"
},
}
}
}
}
}
这返回了嵌套类型。我认为当我开始使用 .AutoMap() 时没有返回 nested 作为一种类型,我是否正确使用它?
更新
我已经解决了我的映射问题。我已将我的映射代码更改为
var responseMap = client.Map<esProduct>(ms => ms
.AutoMap()
.Properties(ps => ps
.Nested<PriceList>(n => n
.Name(c => c.PriceList)
.AutoMap()
)
)
);
最佳答案
在开发过程中,I would recommend logging out requests and responses to Elasticsearch这样您就可以在使用 NEST 时看到发送的内容;这将使与主要 Elasticsearch 文档的关联变得更容易,并确保请求和响应的主体符合您的期望(例如,对映射、查询等有用)。
您的映射看起来不错,尽管您可以放弃属性,因为您使用的是流畅的映射;将它们放在那里没有什么坏处,但在这种情况下它们基本上是多余的(esProduct
的类型名称是唯一适用的部分),因为 .Properties()
将覆盖通过调用 .AutoMap()
应用的推断映射或基于属性的映射。
在您的索引部分,您更新 esProduct
然后立即索引 相同的文档;我不确定这里的意图是什么,但是 update 调用对我来说看起来是多余的; index 调用将在 update 之后立即覆盖索引中具有给定 id 的文档(并且将在刷新间隔后的搜索结果中可见)。 更新 上的.RetryOnConflict(3)
将使用optimistic concurrency control执行更新(这实际上是对集群内文档的 get then index 操作,如果文档版本在获取 和索引)。如果您要用更新替换整个文档,即不是部分更新,那么重试冲突并不是真正必要的(并且根据之前的说明, update 调用在您的示例中看起来完全没有必要,因为 index 调用将覆盖索引中具有给定 id 的文档)。
nested
query看起来正确;您指定嵌套类型的路径,然后对嵌套类型上的字段的查询也将包括该路径。 I'll update the NEST nested query usage documentation to better demonstrate .
批量调用看起来不错;您可能希望分批发送文件,例如一次批量索引 500 个文档,如果你需要索引很多文档。在一次批量调用中发送多少将取决于许多因素,包括文档大小、分析方式、集群性能,因此需要进行试验以获得适合您情况的批量大小调用。
我会检查以确保您找到了正确的索引,该索引包含您期望的文档数量,并找到您知道的 PriceList.Price
为 100 的文档并查看为它编制了索引的内容。使用 Sense 可能会更快当你开始运行时。
关于Elasticsearch NEST 2 如何正确映射和使用嵌套类和批量索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36330471/
所以我试图设置“内容”类的高度,但它似乎不起作用。我对嵌套 DIV 非常陌生,我已经尝试了我在谷歌搜索中发现的修复程序,但似乎没有任何效果。帮助?
好的,所以我一直在四处寻找,但找不到这个问题的答案。但是,我需要将一个 View 嵌套在另一个 View 中。 我有一个 $layout 正在使用我拥有的 default.layout Blade 文
好的,所以我一直在四处寻找,但找不到这个问题的答案。但是,我需要将一个 View 嵌套在另一个 View 中。 我有一个 $layout 正在使用我拥有的 default.layout Blade 文
基本上,我的问题很简单,但它需要知道 Struts 1.1 并且还活着的人。 我尝试构建的伪代码看起来像这样: IF element.method1 = true THEN IF element
我正在尝试将 Excel 嵌套 IF 语句转换为代码语言,但我不确定我是否正确执行此操作,希望能得到一些帮助 这是Excel语句: =IF(D3="Feather",IF(OR(I3>1000,R3=
如果我们创建两个或三个评论并对其进行多次回复,则“有用”链接在单击时会导致问题,它会对具有相同编号的索引执行 ng-click 操作,从而显示具有相同索引的所有文本。如何解决此嵌套问题,以便在单击链接
我在项目中使用Scala,想与Stripe集成,但它只提供Java API。例如,要创建 session ,我使用: val params = new util.HashMap[String, Any
以下代码有一个 Div,其中连续包含四个较小的 Div。四个 Div 中的每一个还包含一个较小的 Div,但此 Div 未显示。我尝试了各种显示和位置组合,看看 div 是否会出现。 classGoa
我在这里有一个问题,循环是: for (i=0; i < n; ++i) for (j = 3; j < n; ++j) { ...
我正在尝试编写代码来显示具有奇数宽度的形状。形状完成后,将其放置在外部形状内。用户将能够输入用于形状的字符和行数。我希望生成一个形状,并通过 for 循环生成一个外部形状。 ***** .
$(".globalTabs").each(function(){ var $globalTabs = $(this); var parent = $globalTabs.parent
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
所以我在这个问题上遇到了一些麻烦,因为变量 i。我只是不确定在第二个 while 循环中如何处理它。对于我的外循环,我知道它将运行 log_4(n^2) 次迭代。对于内部 while 循环,我计算的迭
我似乎找不到在枚举上应用多个 if/then 逻辑的工作方式。 anyOf 不应用条件逻辑,而是表示如果其中任何一个匹配则很好。 allOf 再次不应用条件逻辑,而是测试属性/必填字段的超集。 这是一
如何访问 ReaderT 的内部 monad。 在我的例子中,我有类型: newtype VCSSetupAction a = VCSSetupAction (ReaderT (Maybe VCSCo
这个问题在这里已经有了答案: Add leading zeroes/0's to existing Excel values to certain length (7 个回答) 7年前关闭。 我正在寻
我已经绑定(bind)了很多 AND/OR 函数的组合并且没有运气。 这是我需要创建的: 在 B 列中,我有公司 ID,范围从两个数字字符到六个数字字符。 我需要在 B 列中的每个公司 ID 之前的每
我是 VBA 新手,在尝试编写的宏中使用 If 语句时遇到了一些困难。每个月我都会收到一份 Excel 报告,其中列出了我们公司的哪些员工执行了某些任务。我正在编写的宏旨在将每个员工的数据复制并粘贴到
如果在 B 列中找到单元格 A1 中的值,则使用文本 321 填充除非在 C 列中找到单元格 A1 中的值,在这种情况下填充文本 121反而。如果单元格 A1 的内容不在 B 列或 C 列中,则使用
我有几十万个地址。其中一些在整数之后有粒子。如 4356 A Horse Avenue , 其他格式正常4358 Horse Avenue .有些有“A”,有些有“B”。我正在尝试删除整数和粒子之间的
我是一名优秀的程序员,十分优秀!