我试图在ElasticSearch上进行搜索操作。但是当我调用搜索查询时,客户端指向其他一些索引(我之前使用过)。
这就是我进行设置的方式。
的Web.config:
<appSettings>
<add key="url" value="http://localhost:9200" />
</appSettings>
configvalue1 = ConfigurationManager.AppSettings["url"];
var pool = new SingleNodeConnectionPool(new Uri(configvalue1));
var defaultIndex = "abc";
settings = new ConnectionSettings(pool);
client = new ElasticClient(settings);
if (client.IndexExists(defaultIndex).Exists)
client.DeleteIndex(defaultIndex);
var createIndexResponse =
client.CreateIndex(defaultIndex);
return client;
我正在使用此客户端进行搜索操作。
string query = @"{
""query"": {
""bool"": {
""should"": [
{
""match"": {
""title"": {0}
}
},
{
""match"": {
""content"": {0}
}
}
]
}
}};
string a = query.Replace("{0}", "apple");
var callResult = client.LowLevel.Search<string>(a);
当我检查callResult时,我从不同索引中索引的文档中获得结果(例如:zzz)。对此我有什么需要做的吗?
TIA
答案 0 :(得分:0)
问题是因为你没有告诉Elastic只搜索你的“abc”索引,你告诉它查询localhost端口9200上的每个索引。
您需要做的就是A.首先声明您的索引名称var,然后B.将它(使用/)附加到您正在创建的Uri,这样您只能在该索引中查询。我重构了下面的前三行:
var defaultIndex = "abc";
configvalue1 = ConfigurationManager.AppSettings["url"] + "/" + defaultIndex;
var pool = new SingleNodeConnectionPool(new Uri(configvalue1));
现在,您正在生成一个Uri直接转到服务器/端口/索引。
现在请记住,这将打破你的删除/创建索引调用,这应该是另一个调用 - 定义索引名称,将其传递给调用以删除/创建索引(通过URL)然后你可以创建使用已编辑的示例查询Uri。
答案 1 :(得分:0)
我发现它运行在不同索引上的原因。因为,即使我创建了一个索引,我从未将其分配给客户端。行为也是如此。所以我在设置中添加了索引。
for