现在,在使用控制台时,我们输入的响应似乎并不限制提交的成分。我收到的食谱是包含这些成分,还有更多。
砂糖,鸡蛋
“标题:焦糖核桃---描述:...... ---烹饪时间:......” “标题:爸爸的啤酒面包---描述:...... ---烹饪时间:......” “标题:最佳布朗尼---描述:...... ---库克时间:......” “标题:Plum Jam ---描述:...... ---烹饪时间:......” “标题:酪乳饼干---描述:...... ---烹饪时间:......” ---
是否有办法生成仅使用提交的成分的回复?
答案 0 :(得分:1)
配方建模器(试图查找有效使用您给出的成分和数量的配方)将始终返回指定数量的配方(例如,5)。换句话说,很少会说'#34;你问了5但我只能找到2"除非在底层数据源中没有足够的数据。所以,不要把它当作搜索引擎。把它想象成一个建议引擎。
它找到包含其他成分的食谱,因为它没有任何其他选择。如果有的话,只有很少的食谱只包含糖和鸡蛋,但没有别的。建模者将考虑任何包含至少列表中其中一种成分的配方,并尝试优化最少的总添加成分。换句话说,它希望您的聚合购物清单尽可能短。如果我没记错的话,它甚至会趋向更常见的成分,以增加用户不必去商店旅行的可能性。
目前,建模者使用的确切算法并未设计为可扩展。但是,如果您想要更改设计,那么要查看的位置将采用ModelingSession.cs的Fish
方法。现在,如果pantryIngredients
不为null,它会在该数组中选择一个随机项,并找到一个使用它的随机配方。内存中没有真正可用的索引来查找包含 all 食品室项目的配方,因此您需要在调用Generate
之前构建此索引。这不是一项微不足道的工作,除非您的用户界面允许用户指定大量可用成分,否则每次只会产生非常少的结果。
现在,您似乎追求的更多是搜索功能。
话虽如此,如果您想找到仅使用一组成分的食谱,您可以创建一个搜索提供程序来执行此操作。内置的搜索提供程序(StaticSearch
和NHSearch
)将成分包括为" OR"条款。意思找到含有"糖和#34;的食谱。或者"鸡蛋"。没有任何结构可以找到含有糖和蛋的食谱。也没有一个构造用于找到含有糖和蛋而没有其他成分的配方"。但是,您可以自己轻松实现。您实施ISearchProvider并在定义上下文时将其传递出去:
// Context connected to local database
var dbConfig = Configuration<DBContext>.Build
.Context(DBContext.Configure
.Adapter(DatabaseAdapter.Configure
.DatabaseConfiguration(PostgreSQLConfiguration.PostgreSQL82.ConnectionString(@"<your conn str>")
)
.SearchProvider(new YourSearchProvider()) // <--- Pass in an instance of your search provider
)
.Identity(() => new AuthIdentity(new Guid("c52a2874-bf95-4b50-9d45-a85a84309e75"), "Mike"))
).Create();
YourSearchProvider
会实现ISearchProvider
,而搜索方法会以您希望的任何方式找到食谱。有关如何使用SQL数据源实现此操作的示例,请参阅NHSearch.cs。有人可能会说,NHSearch提供商应该流利地支持这一点。我已logged an issue跟踪此建议。