我根据此文档http://wiki.apache.org/solr/DIHQuickStart
将我的db表直接索引到solr中完全导入有效。但是,当我查询这样的数据时,我得到了 没有结果
$solr = new Apache_Solr_Service('localhost', '8983', 'solr/');
$offset = 0;
$limit = 1000;
$queries = array(
'details:Server'
);
$response = $solr->search( $query, $offset, $limit );
Solr本身正在运行。我尝试查询行“详细信息”但它现在给我结果。
知道我做错了什么吗?
Schema.xml:http://pastebin.com/2kx7MkDX
data-config.xml:http://pastebin.com/vtDZzuqC
solrconfig.xml:http://pastebin.com/V6nzvMa5
全部来自/ example / solr / conf /
答案 0 :(得分:4)
这是你的答案:
您的“详细信息”字段定义为“字符串”。在Solr中,它意味着它被索引为单个文字标记。 'string'类型通常用于标识符。
因此,您的查询“详细信息:服务器”仅匹配“详细信息”完全等于“服务器”的文档,以及不 “详细信息”包含“服务器”的文档。
将您的“详细信息”字段更改为将文本编入单独的字词(标记)的内容:
<field name="details" type="text" ...
<!-- for instance -->
重新索引一切。您可能还想查看其他字段定义。
我建议您阅读schema.xml中的默认类型定义。
答案 1 :(得分:2)
应该
$solr = new Apache_Solr_Service('localhost', '8983', 'solr/');
是
$solr = new Apache_Solr_Service('localhost', '8983', '/solr');
答案 2 :(得分:1)
添加到data-config.xml
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/admin_pproject"
user="root"
password=""/>
<document>
<entity name="id"
query="select id, name,details, owner, subtype, edit, sub, type, provision, active from programme">
<!-- ADD-->
<field column="id" name="id"/>
<field column="name" name="name" />
<field column="details" name="details" />
<field column="owner" name="owner" />
<field column="subtype" name="subtype" />
<field column="edit" name="edit" />
<field column="sub" name="sub" />
<field column="type" name="type" />
<field column="provision" name="provision" />
<field column="active" name="active" />
</entity>
</document>
</dataConfig>
测试
答案 3 :(得分:0)
我们可能需要查看您的schema.xml。其中可能存在错误。
如果您使用小写“s”搜索“server”会怎样?
如果修复它,则会出现分析问题,请查看schema.xml。
您还可以查看架构浏览器(请点击管理页面上的链接)。单击“详细信息”字段(左侧),查看1000或10000术语,查看是否看到“服务器”(或“服务器”)一词。您看到的内容会告诉您该单词是否在索引中(至少,如果该字段中的单词少于10,000个)。