java -version 不多说 solr 是java 开发的

  1. java version "1.7.0_79"
  2. Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
  3. Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

Download Solr:

http://archive.apache.org/dist/lucene/solr/

下载--》解压--》solr-4.10.4/example

  1. SimilarFacedeMacBook-Pro:example similarface$ java -jar start.jar

长长的log我也是醉了

图形化真好看
 
  1. SimilarFacedeMacBook-Pro:solr similarface$ pwd
  2. /Users/similarface/Downloads/solr-4.10.4/example/solr
  3. SimilarFacedeMacBook-Pro:solr similarface$ tree newblog/
  4. newblog/
  5. ├── conf
  6.    ├── _rest_managed.json
  7.    ├── lang
  8.       └── stopwords_en.txt
  9.    ├── protwords.txt
  10.    ├── schema.xml
  11.    ├── solrconfig.xml
  12.    ├── stopwords.txt
  13.    └── synonyms.txt
  14. ├── core.properties
  15. └── data
  16.  
  17. SimilarFacedeMacBook-Pro:solr similarface$ cat newblog/conf/solrconfig.xml
  18. <?xml version="1.0" encoding="utf-8" ?>
  19. <config>
  20. <luceneMatchVersion>LUCENE_36</luceneMatchVersion>
  21. <requestHandler name="/select" class="solr.StandardRequestHandler"
  22. default="true"/>
  23. <requestHandler name="/update" class="solr.UpdateRequestHandler"/>
  24. <requestHandler name="/admin" class="solr.admin.AdminHandlers"/>
  25. <requestHandler name="/admin/ping" class="solr.PingRequestHandler">
  26. <lst name="invariants">
  27. <str name="qt">search</str>
  28. <str name="q">*:*</str>
  29. </lst>
  30. </requestHandler>
  31. </config>
  1. schema.xml默认写下面的:
  1. <?xml version="1.0" ?>
  2. <schema name="default" version="1.5">
  3. </schema>

上面怎么做,bitch ,mkdir and vim

 
 

pip install django-haystack==2.4.0

pip install pysolr==3.3.2

settings.py

  1. haystack ,HAYSTACK_CONNECTIONS
  1. INSTALLED_APPS = [
  2.    ...
  3. 'haystack',
  4. ...
  5. ]
  6.  
  7. HAYSTACK_CONNECTIONS = {
  8. 'default': {
  9. 'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
  10. 'URL': 'http://127.0.0.1:8983/solr/myblog'
  11. },
  12. }
  1. #coding:utf-8
  2. __author__ = 'similarface'
  3.  
  4. from haystack import indexes
  5. from .models import Post
  6. class PostIndex(indexes.SearchIndex,indexes.Indexable):
  7. '''
  8. 给文章Post 建立索引
  9. '''
  10. text = indexes.CharField(document=True, use_template=True)
  11. publish = indexes.DateTimeField(model_attr='publish')
  12. def get_model(self):
  13. return Post
  14. def index_queryset(self, using=None):
  15. return self.get_model().published.all()
  1. SimilarFacedeMacBook-Pro:templates similarface$ tree search/
  2. search/
  3. └── indexes
  4. └── myblog
  5. └── post_text.txt

SimilarFacedeMacBook-Pro:templates similarface$ pwd
/Users/similarface/PycharmProjects/StudyDjango/myblog/templates
SimilarFacedeMacBook-Pro:templates similarface$ cat search/indexes/myblog/post_text.txt
{{ object.title }}
{{ object.tags.all|join:", " }}
{{ object.content }}

  1. SimilarFacedeMacBook-Pro:StudyDjango similarface$ python manage.py build_solr_schema
  2. /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/__init__.py:29: UserWarning: Module email was already imported from /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/email/__init__.pyc, but /Library/Python/2.7/site-packages is being added to sys.path
  3. from pkg_resources import resource_stream
  4. /Library/Python/2.7/site-packages/django/core/management/base.py:265: RemovedInDjango110Warning: OptionParser usage for Django management commands is deprecated, use ArgumentParser instead
  5. RemovedInDjango110Warning)
  6.  
  7. /Library/Python/2.7/site-packages/haystack/management/commands/build_solr_schema.py:56: RemovedInDjango110Warning: render() must be called with a dict, not a Context.
  8. return t.render(c)
  9.  
  10. Save the following output to 'schema.xml' and place it in your Solr configuration directory.
  11. --------------------------------------------------------------------------------------------
  12.  
  13. <?xml version="1.0" ?>
  14. <!--
  15. Licensed to the Apache Software Foundation (ASF) under one or more
  16. contributor license agreements. See the NOTICE file distributed with
  17. this work for additional information regarding copyright ownership.
  18. The ASF licenses this file to You under the Apache License, Version 2.0
  19. (the "License"); you may not use this file except in compliance with
  20. the License. You may obtain a copy of the License at
  21.  
  22. http://www.apache.org/licenses/LICENSE-2.0
  23.  
  24. Unless required by applicable law or agreed to in writing, software
  25. distributed under the License is distributed on an "AS IS" BASIS,
  26. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  27. See the License for the specific language governing permissions and
  28. limitations under the License.
  29. -->
  30.  
  31. <schema name="default" version="1.5">
  32. <types>
  33. <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
  34. <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>
  35. <fieldtype name="binary" class="solr.BinaryField"/>
  36.  
  37. <!-- Numeric field types that manipulate the value into
  38. a string value that isn't human-readable in its internal form,
  39. but with a lexicographic ordering the same as the numeric ordering,
  40. so that range queries work correctly. -->
  41. <fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/>
  42. <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/>
  43. <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/>
  44. <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/>
  45. <fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>
  46. <fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>
  47. <fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>
  48. <fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>
  49.  
  50. <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
  51. <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
  52. <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
  53. <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
  54.  
  55. <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/>
  56. <!-- A Trie based date field for faster date range queries and date faceting. -->
  57. <fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/>
  58.  
  59. <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
  60. <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
  61. <fieldtype name="geohash" class="solr.GeoHashField"/>
  62.  
  63. <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  64. <analyzer type="index">
  65. <tokenizer class="solr.StandardTokenizerFactory"/>
  66. <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
  67. <!-- in this example, we will only use synonyms at query time
  68. <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
  69. -->
  70. <filter class="solr.LowerCaseFilterFactory"/>
  71. </analyzer>
  72. <analyzer type="query">
  73. <tokenizer class="solr.StandardTokenizerFactory"/>
  74. <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
  75. <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
  76. <filter class="solr.LowerCaseFilterFactory"/>
  77. </analyzer>
  78. </fieldType>
  79.  
  80. <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
  81. <analyzer type="index">
  82. <tokenizer class="solr.StandardTokenizerFactory"/>
  83. <filter class="solr.StopFilterFactory"
  84. ignoreCase="true"
  85. words="lang/stopwords_en.txt"
  86. enablePositionIncrements="true"
  87. />
  88. <filter class="solr.LowerCaseFilterFactory"/>
  89. <filter class="solr.EnglishPossessiveFilterFactory"/>
  90. <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
  91. <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
  92. <filter class="solr.EnglishMinimalStemFilterFactory"/>
  93. -->
  94. <filter class="solr.PorterStemFilterFactory"/>
  95. </analyzer>
  96. <analyzer type="query">
  97. <tokenizer class="solr.StandardTokenizerFactory"/>
  98. <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
  99. <filter class="solr.StopFilterFactory"
  100. ignoreCase="true"
  101. words="lang/stopwords_en.txt"
  102. enablePositionIncrements="true"
  103. />
  104. <filter class="solr.LowerCaseFilterFactory"/>
  105. <filter class="solr.EnglishPossessiveFilterFactory"/>
  106. <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
  107. <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
  108. <filter class="solr.EnglishMinimalStemFilterFactory"/>
  109. -->
  110. <filter class="solr.PorterStemFilterFactory"/>
  111. </analyzer>
  112. </fieldType>
  113.  
  114. <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
  115. <analyzer>
  116. <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  117. </analyzer>
  118. </fieldType>
  119.  
  120. <fieldType name="ngram" class="solr.TextField" >
  121. <analyzer type="index">
  122. <tokenizer class="solr.KeywordTokenizerFactory"/>
  123. <filter class="solr.LowerCaseFilterFactory"/>
  124. <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15" />
  125. </analyzer>
  126. <analyzer type="query">
  127. <tokenizer class="solr.KeywordTokenizerFactory"/>
  128. <filter class="solr.LowerCaseFilterFactory"/>
  129. </analyzer>
  130. </fieldType>
  131.  
  132. <fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1">
  133. <analyzer type="index">
  134. <tokenizer class="solr.WhitespaceTokenizerFactory" />
  135. <filter class="solr.LowerCaseFilterFactory" />
  136. <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
  137. <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
  138. </analyzer>
  139. <analyzer type="query">
  140. <tokenizer class="solr.WhitespaceTokenizerFactory" />
  141. <filter class="solr.LowerCaseFilterFactory" />
  142. <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
  143. </analyzer>
  144. </fieldType>
  145. </types>
  146.  
  147. <fields>
  148. <!-- general -->
  149. <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
  150. <field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/>
  151. <field name="django_id" type="string" indexed="true" stored="true" multiValued="false"/>
  152. <field name="_version_" type="long" indexed="true" stored ="true"/>
  153.  
  154. <dynamicField name="*_i" type="int" indexed="true" stored="true"/>
  155. <dynamicField name="*_s" type="string" indexed="true" stored="true"/>
  156. <dynamicField name="*_l" type="long" indexed="true" stored="true"/>
  157. <dynamicField name="*_t" type="text_en" indexed="true" stored="true"/>
  158. <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
  159. <dynamicField name="*_f" type="float" indexed="true" stored="true"/>
  160. <dynamicField name="*_d" type="double" indexed="true" stored="true"/>
  161. <dynamicField name="*_dt" type="date" indexed="true" stored="true"/>
  162. <dynamicField name="*_p" type="location" indexed="true" stored="true"/>
  163. <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
  164.  
  165. <field name="text" type="text_en" indexed="true" stored="true" multiValued="false" />
  166.  
  167. <field name="publish" type="date" indexed="true" stored="true" multiValued="false" />
  168.  
  169. </fields>
  170.  
  171. <!-- field to use to determine and enforce document uniqueness. -->
  172. <uniqueKey>id</uniqueKey>
  173.  
  174. <!-- field for the QueryParser to use when an explicit fieldname is absent -->
  175. <defaultSearchField>text</defaultSearchField>
  176.  
  177. <!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
  178. <solrQueryParser defaultOperator="AND"/>
  179. </schema>
  180.  
  181. #Save the following output to 'schema.xml' and place it in your Solr configuration directory.
  182.  
  183. vi ~/Downloads/solr-4.10.4/example/solr/myblog/conf/schema.xml

  1. SimilarFacedeMacBook-Pro:StudyDjango similarface$ python manage.py rebuild_index
  2. from pkg_resources import resource_stream
  3. /Library/Python/2.7/site-packages/django/core/management/base.py:265: RemovedInDjango110Warning: OptionParser usage for Django management commands is deprecated, use ArgumentParser instead
  4. RemovedInDjango110Warning)
  5.  
  6. WARNING: This will irreparably remove EVERYTHING from your search index in connection 'default'.
  7. Your choices after this are to restore from backups or rebuild via the `rebuild_index` command.
  8. Are you sure you wish to continue? [y/N] y
  9. Removing all documents from your index because you said so.
  10. Failed to clear Solr index: [Reason: Error 404 Not Found]
  11. All documents removed.
  12. Indexing 8 posts
  13. /Library/Python/2.7/site-packages/haystack/fields.py:137: RemovedInDjango110Warning: render() must be called with a dict, not a Context.
  14. return t.render(Context({'object': obj}))
  15.  
  16. Failed to add documents to Solr: [Reason: Error 404 Not Found]

 

Django之站内搜索-Solr,Haystack的更多相关文章

  1. 利用Solr服务建立的站内搜索雏形---solr1

    最近看完nutch后总感觉像好好捯饬下solr,上次看到老大给我展现了下站内搜索我便久久不能忘怀.总觉着之前搭建的nutch配上solr还是有点呆板,在nutch爬取的时候就建立索引到solr服务下, ...

  2. 利用Solr服务建立的站内搜索雏形

    最近看完nutch后总感觉像好好捯饬下solr,上次看到老大给我展现了下站内搜索我便久久不能忘怀.总觉着之前搭建的nutch配上solr还是有点呆板,在nutch爬取的时候就建立索引到solr服务下, ...

  3. 一步步开发自己的博客 .NET版(5、Lucenne.Net 和 必应站内搜索)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

  4. Lucene.net站内搜索—6、站内搜索第二版

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  5. Lucene.net站内搜索—5、搜索引擎第一版实现

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  6. Lucene.net站内搜索—4、搜索引擎第一版技术储备(简单介绍Log4Net、生产者消费者模式)

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  7. Lucene.net站内搜索—3、最简单搜索引擎代码

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  8. Lucene.net站内搜索—2、Lucene.Net简介和分词

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  9. Lucene.net站内搜索—1、SEO优化

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

随机推荐

  1. 【POJ1067】取石子游戏(威佐夫博弈)

    题意:有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子. 游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子. 最后把石子全部取完 ...

  2. 学习总结——JMeter做http接口压力测试

    JMeter做http接口压力测试 测前准备 用JMeter做接口的压测非常方便,在压测之前我们需要考虑这几个方面: 场景设定 场景分单场景和混合场景.针对一个接口做压力测试就是单场景,针对一个流程做 ...

  3. Windows下Mysql数据库服务的关闭和重启

    有时我们在手动修改了Mysql的配置文件之后,我们要重启Mysql服务才能使之生效,这里提供几种重启方法: 1.windows下重新启动mysql5的方法:在安装mysql时系统会添加服务,可以通过管 ...

  4. C#根据经纬度获取物理地址

    废话不多说,直接上代码: 1.首先新建几个类,定义一些属性: public class BaiDuGeoCoding { public int Status { get; set; } public ...

  5. Scala之Future超时

    最近在开发中使用akka http进行请求,返回的是一个future,并且要对future进行超时设置,不知怎么设置,因此学习了下. 一.Future阻塞 首先,scala中的future不支持内置超 ...

  6. linux 项目管理、服务器管理、服务器维护

    代码打包:tar -zcvf ImOra.3.2.6.tgz --exclude=Public/.htaccess --exclude=Apps/Demo Apps/ Config/ Shell/ L ...

  7. Android性能优化第(一)篇---基本概念

    最近打算总结几篇app性能优化方面的东西,毕竟android弄了这么久,万一到哪些转了行,岁月久了就忘记了,纯粹当个人笔记.今个是第一篇---性能优化的基本概念,毛主席说了,让理论先行,理论指导实践. ...

  8. django导出数据到excel

    import xlwt,StringIodef dumpData(request): #获取数据 activitys = Activity.objects.all().order_by('id') i ...

  9. #pragma预处理命令【转】

    原文 : http://www.cnblogs.com/qinfengxiaoyue/archive/2012/06/05/2535524.html #pragma可以说是C++中最复杂的预处理指令了 ...

  10. ElasticSearch搜索term和terms的区别

    今天同事使用ES查询印地语的文章.发现查询报错,查询语句和错误信息如下: 查询语句:{    "query":{        "bool":{         ...