我有一个问题需要一个非常简单的ElasticLinq搜索来返回结果。问题似乎是它向ElasticSearch发送了一个对搜索网址不正确的网址。这是我尝试过的:
var connection = new ElasticConnection(new Uri("http://localhost:9200"), index: "mytypes");
var context = new ElasticContext(connection);
var results = (from a in context.Query<MyType>() select a).Take(10).ToArray();
当我执行最后一行时,这是我在Fiddler中看到的URL:
http://localhost:9200/mytypes/mytypes/_search
问题似乎是mytypes在URL中使用了两次而不是一次。
我还尝试过不向ElasticConnection构造函数提供默认索引,在这种情况下,搜索网址如下:
http://localhost:9200/_all/mytypes/_search
在这两种情况下,我都没有得到任何结果。如果我使用
提交查询http://localhost:9200/mytypes/_search
我得到了结果。
如何让ElasticLINQ使用正确的搜索网址?
答案 0 :(得分:2)
URL中的第二个mytypes是Query()
中的强T类型默认约定CLR类型等同于Elasticsearch文档类型。如果您不希望这样做,您可以覆盖ElasticMapping的GetDocumentType以返回空字符串或空字符串。
然后,您需要考虑类型的映射方式。还有一些其他选项,例如完全限定字段名称和插入字段存在检查每个选项。 (这就是我们在这里所做的)
public JohnsElasticMapping : ElasticMapping {
public string GetDocumentType(Type type) { return null; }
}
...
var context = new ElasticContext(connection, new JohnsElasticMapping());