2015-08-13 61 views
0

我正在使用RavenDb来存储数据。文档有像Id,名称,说明等列在Raven db中搜索问题db

我设置索引为“名称”字段显然搜索输入文本为“包含”,并在查询中我使用 它作为“StartsWith”这是工作正常。 请参见下面的代码:

index setting 
    //this.Indexes.Add(x => x.Name, FieldIndexing.Analyzed); 

    //Data retrieving Code 
    //var resultSet = from temp in Query<Model>(Index.NAME) 
    //.Where(x => x.Name.StartsWith(Searchterm)) 
    // select new { temp.Name } 

我的问题是假设数据库名称是“ABC PQR XYZ”
CASE1(开头):当我在搜索框中输入“ABC”,我得到妥善纪录以上。
CASE2(整词搜索):当我输入“ABC P”或“ABC PQ”或“ABC PQR”时,我没有得到任何结果。 (这是问题)
CASE3(CONTAINS):当我输入“焊接工艺评定”或“XYZ”,我得到记录正确

现在,当我改变指数为默认值,如:

//this.Indexes.Add(x => x.Name, FieldIndexing.Default); 

从以上CASE1 & 2正在工作,但case3不是。

有什么办法可以让所有3个案例工作?任何帮助将非常感激..

回答

0

当您使用分析,会发生什么是您的文本被分解成个人条款。

分析意味着,在指数的条件是:

[ABC,PQR,XYZ]

对于情况1,开始用,很容易看到它是如何工作的。 对于案例2,整个单词,你不要与ABC P任何术语,或类似的东西。

而且对于案例3,也没有包含该术语的术语。

+0

是的,当我使用分析时,术语突破[ABC,PQR,XYZ]。 – Freelancer

+0

是的,当我使用分析时,条款突破[ABC,PQR,XYZ]。请注意,“ABC PQR XYZ”在db中是单个词作为“名称”。所以我想要的是:CAES1:当我在搜索框中输入“ABC”时,它应该返回全名,如“ABC PQR XYZ”CAES2:当我在搜索框中输入“ABC P”或“ABC PQ”或“ABC PQR”我应该得到“ABC PQR XYZ”。 CAES3:当我输入“PQR”或“XYZ”时,我也希望得到整个单词“ABC PQR XYZ”。 – Freelancer

+0

多次索引该字段,一次分析,一次没有。然后适当地搜索相关的索引字段。 –