为什么弹性搜索客户端在执行搜索查询时指向不同的索引

时间:2016-05-09 06:05:35

标签: c# elasticsearch nest

我试图在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

2 个答案:

答案 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