为什么solr仅通过精确搜索返回结果?

时间:2015-10-09 10:30:37

标签: search solr lucene information-retrieval

我创建了一个核心{"id" : "11","resid" : 384,"title" : "perl and java developer","name" : "appnede new name","cat" : "22,11","role" : "new role","exp" : 1 } 考虑一个示例数据:title:perl。 当我搜索title:"perl and java developer"时,我得到0结果。只有当我搜索title:perl*<response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">2</int> <lst name="params"> <str name="indent">true</str> <str name="q">title:perl*</str> <str name="_">1444371225114</str> <str name="wt">xml</str> </lst> </lst> <result name="response" numFound="1" start="0"> <doc> <str name="id">11</str> <arr name="resid"> <long>384</long> </arr> <arr name="title"> <str>perl and java developer</str> </arr> <arr name="name"> <str>appnede new name</str> </arr> <arr name="cat"> <long>2211</long> </arr> <arr name="role"> <str>new role</str> </arr> <arr name="exp"> <long>1</long> </arr> <long name="_version_">1514531870450122752</long></doc> </result> </response> 时,才会提到结果。 响应:

<arr name="role"><str>new role</str></arr>

另外,为什么响应在arr <str name="role">new role</str>?我想在var properties = typeof(Device).GetProperties().Where(prop => prop.PropertyType == query.GetType()); 中使用其他文件也是如此。怎么做?我使用的是solr 5.3.0。

2 个答案:

答案 0 :(得分:1)

我认为您已将字段定义为字符串而不是文本。字符串字段完全匹配,而文本字段可以获得您要查找的结果。

另请参阅另一个答案:https://stackoverflow.com/a/7187441/147306

答案 1 :(得分:0)

解决了以上问题。我已将字段类型更改为text_general_new,这是一个类似于text_general的新字段类型,并进行了一些自定义。
或者,您可以将text_generalmultiValued="false"一起使用。这些更改需要在managed-schema文件中完成。这是solr使用的隐式模式文件。

但作为初学者,我在这里还有一个疑问。 Solr隐式使用managed-schema作为schema.xml的替代,但是从哪里了解JSON文件中的字段?我的意思是,它已经为我的JSON中的每个字段定义了字段。怎么知道的?哪个文件(带位置)对此负责?