findinsite-ms Royal Mail Postcode Address File PAF® and CSV search
Example search
Search a very small CSV with
fictitious addresses from Llareggub, Wales,
Brigadoon, Scotland and Hogsmeade, England.
You can use wild cards such as * and ? (but not by themselves).
A special version of FindinSite-MS indexes and searches a complete Royal Mail PAF CSV file.
- US$99 Personal license for a single workstation; US$299 Standard license for a shared single server.
- Fill in our Feedback form to request an evaluation copy - installation instructions.
- You must obtain a PAF file separately.
- Use this tool to clean address data, ie search for an address and find a complete standard address.
- The search supports * and ? wild cards to make it easy to find addresses eg where hand-written information
is unclear or missing.
- The search can optionally look for contiguous words in an address.
- No database required. Runs as a Microsoft ASP.NET web application in IIS on Windows XP/Vista/Server - details.
- Web service available in Standard edition and evaluation; use FindinSite-MS as the basis of your own complete applications - API.
- PAF English and Welsh files can be searched.
- Typical search time for a postcode: less than 0.1 second.
- Any data in a single CSV format can be searched, so convert your database or spreadsheet to CSV,
and search it with FindinSite-MS.
Introduction
The full PAF postcode address file is almost 4GB in length and contains some 28 million address lines.
Most users want to find data within this file quickly, eg to verify customer addresses.
FindinSite-MS provides a complete yet simple solution for address searching;
or its web service can be used from your own custom program for specialised requirements.
The FindinSite-MS Personal licence runs on one workstation - it does not support the web service.
The Standard licence versions runs on a single workstation/server/website and allows any
number of simultaneous external users.
Please ensure that you are using the Royal Mail Postcode Address File PAF® data in accordance
with your PAF licence restrictions.
Indexing
To use FindinSite-MS, an index of the PAF data must be built first.
This one-off process usually takes 2 to 4 hours for a complete PAF CSV.
The index consists of several large files that must be copied to the FindinSite-MS web application FindData directory.
Search syntax
The basic FindinSite-MS search is very simple: it finds addresses that contain all the search words *in any order*.
So a search for Lake View finds address Lake View, Bampton
but would also find Cottage View, Killington Lake.
If the search contains one or more commas, then multiple words between commas must be contiguous.
So a search for Lake View, Bampton only finds addresses where
Lake is followed by View, as well as Bampton.
When you search for a postcode, you must separate the two parts of the postcode, eg
W1A 1AA not W1A1AA
Currently there is no option to search just on one field, eg postcode, town etc.
Search example
If you use the default option provided by the installation, the FindinSite-MS PAF search web
application is found at this web address: http://localhost/SearchPAF/search.aspx
Here is a typical screenshot of the search form shown by the FindinSite-MS web application in your browser:
Here is an example of the output produced for a search for W1A 1A?
where the ? matches any single character. The results are mainly postcodes in central London,
but also includes one address from elsewhere that matches this search pattern.
Note: the real output does NOT (currently) include yellow highlights - these are added here to
show the words that have matched the search.
Let us know if you would like the output cleaned of double quotes or expanded so that it has a list
of fields and values, eg "Postcode: W1A 1AA".
Total hits: 11
CSVNo: 983,398: "","5Y","34","","Unit W1A","Xxxx Xxxx","","18","","Forge Lane","Minworth Industrial Park","Minworth","Sutton Coldfield","Warwickshire","West Midlands","","England","B76 1AH","46453","N","959075"
CSVNo: 26,605,043: "Xxxxxxxxx Xxxx","1A","1","","","Xxxx XXXX","","","","Portland Place","","","London","Middlesex","","","England","W1A 1AA","49411","L","25733896"
CSVNo: 26,605,044: "","1A","1","","","Xxxxxxx","1AE","","","","","","London","Middlesex","","","","W1A 1AE","49411","L","25733899"
CSVNo: 26,605,045: "","1A","1","","","","5659","","","","","","London","","","","","W1A 1AJ","49411","L","50436794"
CSVNo: 26,605,046: "","1A","1","","","","5674","","","","","","London","","","","","W1A 1AP","49411","L","50504723"
CSVNo: 26,605,047: "","1A","1","","","","1AQ","","","","","","London","Middlesex","","","","W1A 1AQ","49411","L","25733903"
CSVNo: 26,605,048: "","1A","1","","","","5677","","","","","","London","","","","","W1A 1AR","49411","L","50528551"
CSVNo: 26,605,049: "","1A","1","","","","6292","","","","","","London","","","","","W1A 1AT","49411","L","51077161"
CSVNo: 26,605,050: "","1A","1","","","","1AU","","","","","","London","Middlesex","","","","W1A 1AU","49411","L","25733905"
CSVNo: 26,605,051: "","1A","1","","","","5669","","","","","","London","","","","","W1A 1AW","49411","L","50493363"
CSVNo: 26,605,052: "","1A","1","","","","1AZ","","","","","","London","Middlesex","","","","W1A 1AZ","49411","L","25733906"
Search time = 0.0290 seconds
Search performance limits
If you enter a very general search such as simply Road then
limits are applied to save processing time and software memory.
In this case, only the first 1,000 hits are listed by the web application.
Other internal limits are also used. If these are exceeded then this message appears at the top
of the search output:
More results might be available - add to your search to get more.
In some cases, eg after contigous word searches, this message might appear when there are only a
few results or even none - so if you see this, add more to your search so that FindinSite-MS has
more to go on.
There is no processing time limit.
Web service example
A full application with C# source is provided to let you test the web service.
The screenshot below shows the test application in action:
The user has searched for W1A 1A? where the ?
matches any single character. Again, the results are mainly postcodes in central London, but also includes
one address from elsewhere that matches this search pattern.
Web service search performance limits
In addition to the internal search limits mentioned above, the web service limits the results sent to
1,000 records - so as to save network bandwidth. If no "Start" and "End" record numbers are given,
then the web service returns the first 20 records.
Again, please note the "More results may be available" box in the screenshot above:
if this is ticked then please add more to your search to give FindinSite-MS more to go on.
Web service caching
ASP.NET is instructed to cache web service requests and results for 60 seconds,
so an identical request within this time will return the cached associated result;
the web service will not be called in this case.
In addition, the web service itself caches a complete result set for 5 minutes after the most recent call.
So a first request might return the first 20 hits. A subsequent request for the next 20 hits will be
returned from this cache, so the search does not have to be performed again -
provided the returned "reference" is sent with subsequent requests.
If the reference is invalid or has been removed from the cache, then the search is done again and a
new reference returned.
Technical requirements
FindinSite-MS is an ASP.NET 2+ web application that runs in Internet Information Server (IIS) on
these Microsoft workstations and servers:
- Windows XP Professional - includes IIS5
- Windows Vista - includes IIS7 (all versions above Home Basic)
- Windows Server 2003 - includes IIS6
- Windows Server 2008 - includes IIS7
In some cases, you may need to install IIS and the .NET Framework.
Any version of the .NET Framework version 2 or above is suitable.
The FindinSite-MS installer checks for IIS and prompts you to download the latest
.NET framework.
Installation
You will usually need to be an Administrator install the software.
See above for technical requirements.
Run the setup file SearchPAFSetup.msi (see below for Vista and Server 2008).
A wizard checks that you have the prerequisite software, and guides you through the available options.
The main choice is the "Virtual directory" - usually the default option of "SearchPAF" is fine -
do not put spaces in this name (although it is OK for XP/IIS5).
If using IIS7, then leaving the "Application Pool" at "DefaultAppPool" is fine.
Once installed, various items appear in [Start][All Programs][Search PAF].
Select [PAF Search] to do a search of the example PAF - this opens your browser to show the web site
http://localhost/SearchPAF/search.aspx
Re-install or upgrade
Reinstalling or installing a later version of this software will preserve your current settings and
will not overwrite your search database files.
The reinstall/upgrade will attempt to remove your existing installation first. You may be prompted
to remove the product in the Control Panel; do the uninstall and restart the install.
If you are prompted to Repair/Remove the product, then select Repair.
Windows Vista and Windows Server 2008 - IIS 7
If installing on Windows Vista (all versions above Home Basic) and Windows Server 2008,
then you must do these two steps to do the install:
- Enable "IIS Metabase and II6 configuration compatibility" as per
these instructions.
(Otherwise you get an error: "The installer was interrupted before...")
- Either
- Run the supplied Setup.exe program
- Or
-
Get an administrator command prompt:
[Start][All Programs][Accessories] then right-click on [Command Prompt] then select [Run as administrator].
Move to the directory that contains the downloaded MSI file. Type in:
msiexec /i SearchPAFSetup.msi
Prerequisites check
The installer checks that you have a suitable version of IIS and the .NET Framework.
If not, an error such as the following is given:
If the install progresses but then mysteriously stops and then rollsback, then it is possible that
your IIS installation is not configured to use ASP.NET. Contact us for advice: run aspnet_regiis -i .
Uninstall
To uninstall the software go the Control Panel. In XP go the [Add/Remove Programs].
In Vista, go to [Programs][Uninstall Programs] or [Programs and Features].
Select "Search PAF" and press [Remove] or [Uninstall].
The uninstall process (deliberately) does not remove any data files created in the web application
FindData working directory. This stops you losing useful files during an upgrade.
If you want to clear the computer completely, you will need to use Windows Explorer to delete the installation
directory. If you used the default virtual application of "SearchPAF" then the install directory is
inetpub\wwwroot\SearchPAF\ on your Windows drive, eg C:\inetpub\wwwroot\SearchPAF\
In Vista the SearchPAF folder still remains visible in IIS Manager. First, remove the directory as described above.
In IIS Manager, open the "Default Web Site" [Content View]. Right click on "SearchPAF" and click on [Remove].
Web Service API
- Only read this section if you are a programmer wanting to use the web service API.
- The web service API is not supported in the Personal edition.
Introduction
You will typically use Microsoft Visual Studio or equivalent to use the FindinSite-MS web service API.
The supplied WebServiceTest Windows Forms application C# source demonstates the code needed to call the
web service API. The web service can also be called from an ASP.NET web application etc if desired.
Be aware of the amount of data requested across network paths. However, the current API has strict
limits which should ensure that only a reasonable number of records are ever sent at one time over
the network. Other limits also ensure that the search service does not get tied up with one request.
While you can use a Web Reference or ASP.NET 3.5 Service Reference, the recommended approach is to use
the supplied client assembly, phdcc.fisms.ServiceClient.dll that defines class
com.phdcc.WebService.SearchService. If setting up a new project,
add a reference to this DLL. This client DLL has an interface that is almost identical to that
obtained using a Web Reference but lets you specify the web service URL in its constructor.
The API
Set up your connection to the API by passing the constructor the web service URL:
public com.phdcc.WebService.SearchService( string URL);
Set up your search request in a fisSearchRequest object, call
Search() and then analyse the returned fisSearchResult:
public fisSearchResult Search(fisSearchRequest SearchRequest);
A fisSearchRequest search request is defined as follows:
public class fisSearchRequest
{
public string UserParam; |
// A string or null that is passed to the fisSearchResult |
public string Text; |
// The search text |
public string Reference; |
// A reference to a cached search, returned in a previous fisSearchResult |
public int HitsFrom; |
// Which hit to return first, 0 based |
public int HitsCount; |
// The count of hits to return |
}
If HitsFrom and HitsCount are zero, then the first 20 hits are returned.
A fisSearchResult search result is defined as follows:
public class fisSearchResult
{
public string UserParam; |
// The value passed in the fisSearchRequest |
public int Count; |
// The total number of hits available |
public string Message; |
// Any error message |
public bool MoreResultsMightBeAvailable; |
// True if the search was halted because too many results were found |
public object[] Hits; |
// If non-null, a string array with the CSV records |
public int HitsFrom; |
// The first hit number returned in Hits |
public double SearchTime; |
// The search time in seconds |
public string Reference; |
// A cache reference to pass to a subsequent fisSearchRequest |
}
The Hits are returned in the order that they occur in the PAF CSV.
C# Code Example
Here is very bare bones code that shows how to call the FindinSite-MS Web Service from C#.
using com.phdcc.WebService;
:
SearchService SearchTool = new SearchService("http://localhost/SearchPAF/search.aspx");
fisSearchRequest SearchRequest = new fisSearchRequest();
SearchRequest.Text = "W1A 1A?";
// Do search
fisSearchResult rv = SearchTool.Search(SearchRequest);
|